Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 需要在多个rails模型上运行任务。我可以使用数组do循环吗?_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 需要在多个rails模型上运行任务。我可以使用数组do循环吗?

Ruby on rails 需要在多个rails模型上运行任务。我可以使用数组do循环吗?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我有一个rake任务,其中我操作一个模型。它更新和删除表中的内容。 我在其他数据库中有相同的表,我为这些表创建了其他模型。我如何在那些其他模型上运行相同的任务,而不复制代码并保持干燥 例如,下面是我的代码: # Category is the model new_region = Category.find_or_initialize_by_code(:code) ... ... new_region.save! 我希望能够对另一个名为Hierarchy 但我不想重复这样的代码: # Hie

我有一个rake任务,其中我操作一个模型。它更新和删除表中的内容。 我在其他数据库中有相同的表,我为这些表创建了其他模型。我如何在那些其他模型上运行相同的任务,而不复制代码并保持干燥

例如,下面是我的代码:

# 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!
如何处理数组中的字符串?这样可以吗?我对rails中幕后可能发生的类型转换感到不舒服。

您可以这样做

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将字符串转换为类

您就快到了,只需直接使用类对象,如下所示:

my_models = [Category, Hierarchy]

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

没错,
klass
变量只是一个常规的旧变量,但它在迭代数组时存储一个类对象。假设您的数组是一组数字-这将是相同的交易。顺便说一句,
klass
变量是常用的,因为
class
是一个保留字。因此出现了拼写错误。