我有一个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!
如何处理数组中的字符串?这可以吗?我对使用轨道幕后可能发生的类型转换感到不舒服。
答案 0 :(得分:5)
你几乎就在那里,只需直接使用类对象,如下所示:
my_models = [Category, Hierarchy]
my_models.each do |klass|
a_region = klass.find_or_initialize_by_code(:code)
...
...
a_region.save!
end
答案 1 :(得分: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会将字符串转换为类