这里是Ruby on Rails的新手。我正在尝试重构rake任务。它可以正常工作,但我不确定它从哪里开始,但可能会更简洁。请提供有关如何改进此代码的建议。
task assign_position_to_items: :environment do
pos = 0
MyObject.find(param).checklist_item_sections.order(:id).each do | item |
item.update(position: pos)
pos += 1
item.check_list_items.order(:id).each do | itm |
itm.update(position: pos)
pos += 1
itm.inspection_responses.order(:id).each do | it |
it.update(position: pos)
pos += 1
end
end
end
end
您可以使用Enumerable#each_with_index
参见api docs将其干燥一点,也可以循环使用相关方法进一步干燥它。最后,您可以将递增方法作为参数传递。
task assign_position_to_items: :environment do
MyObject.find(param).checklist_item_sections.order(:id).each_with_index do |item, pos|
item.update(position: pos)
[:check_list_items, :inspection_responses].each do |method|
pos += 1
item.send(method).order(:id) do |children|
children.upate(position: pos += 1)
end
end
end
end