0

rubyスクリプトでは、テーブルのリストからテーブル名を動的に取得するループを実行しており、その上で何らかのCRUD操作(主に挿入)を実行する必要があります。私はSequelOrmを使用しており、さまざまなテーブルのモデルを作成しました。挿入を実行できるように、各テーブルのモデルの名前を見つけるにはどうすればよいですか?

    Tables = ["table1"、 "table2"、'table3 "、...]
    Tables.each do | t |
    #tに挿入を実行
    #テーブルtのモデル名を見つける方法は?
    終わり

ハッシュを使用して各テーブルのモデル名を格納することも、各テーブルの最初の文字を大文字に変換するなどのパターンに従うこともできます。

これを行うためのより良い方法はありますか?

4

2 に答える 2

1

あなたが求めていることは、ブルートフォース検索なしでは一般的なケースでは不可能であり、それでも、次のことが有効であるという単純な理由から、あいまいです。

class Foo < Sequel::Model(:table1); end
class Bar < Sequel::Model(:table1); end

基本的に、各モデルには関連するデータセットがあります(通常は単純なSELECT * FROMテーブル)。ただし、他のモデルは同じまたは類似のデータセットを使用できます。したがって、モデルからテーブルへの移動は簡単ですが、テーブルからモデルへの移動は簡単ではありません。

独自のモデルを作成した場合、必要なものを処理する最も簡単な方法は、ハッシュを使用することです。

ModelMap = {}
ModelMap["table1"] = Model1
ModelMap["table2"] = Model2

次に、次のことを実行できます。

ModelMap[t]

その各ブロック内でモデルクラスを取得します。

于 2012-02-23T16:36:05.903 に答える
0

モデルとテーブルの間で複数形の規則に従っている限り、テーブル名からモデル名を取得する1つの方法は、次のようなものです。

table_name = :users
table_name.to_s.classify 

しかし、それはあなたがやろうとしていることではないようです。新しいreordを挿入するか、既存のreordを更新する必要があります。すでにテーブル名を持っているので、次のようなことを検討することをお勧めします。

tables=["table1","table2",'table3",...]
tables.each do |t| 
  DB[t.to_sym].insert(...)
end

ただし、上記の回答のJeremy Evansが続編の宝石の作成者であると考えてみてください。彼がこれを解決策として推奨しなかった場合は、正当な理由がある可能性があります。

于 2020-11-13T20:08:23.393 に答える