0

1 つのモデルを操作するレーキ タスクがあります。テーブル内のものを更新および削除します。他のモデルを作成した他のデータベースに同一のテーブルがあります。コードを複製したり、DRY のままにしたりせずに、他のモデルで同じタスクを実行するにはどうすればよいでしょうか?

たとえば、ここに私のコードがあります:

# Category is the model
new_region = Category.find_or_initialize_by_code(:code)
... 
...
new_region.save!

という別のモデルで同じことを実行できるようにしたいのですが、次のHierarchy ようなコードを複製したくありません。

# Hierarchy is the model
new_cat_region = Hierarchy.find_or_initialize_by_code(:code)
... 
...
new_cat_region_cat.save!

モデルの配列を作成して、このようにループする方法はありますか?

   my_models = ['Category', 'Hierarchy']

   my_models.each do |model_name|
     a_region = model_name.find_or_initialize_by_code(:code)
       ... 
       ...
     a_region.save!

配列内の文字列はどのように扱われますか? これでいいのでしょうか?レールの舞台裏で行われている可能性のある型キャストに不快感を覚えます。

4

2 に答える 2

5

次のように、クラス オブジェクトを直接使用するだけです。

my_models = [Category, Hierarchy]

my_models.each do |klass|
  a_region = klass.find_or_initialize_by_code(:code)
    ... 
    ...
  a_region.save!
end
于 2013-06-12T15:39:06.450 に答える
2

これは次のように行うことができます。

my_models = ['Category', 'Hierarchy']

my_models.each do |model_name|
 a_region = model_name.constantize.find_or_initialize_by_code(:code)
   ... 
   ...
 a_region.save!

constantize は文字列をクラスに変換します

于 2013-06-12T15:38:45.340 に答える