Ruby on rails 需要在多个rails模型上运行任务。我可以使用数组do循环吗?
我有一个rake任务,其中我操作一个模型。它更新和删除表中的内容。 我在其他数据库中有相同的表,我为这些表创建了其他模型。我如何在那些其他模型上运行相同的任务,而不复制代码并保持干燥 例如,下面是我的代码: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
# 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
是一个保留字。因此出现了拼写错误。