将rake任务重构为较少重复性

问题描述 投票:1回答:1

这里是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
ruby-on-rails ruby refactoring rake
1个回答
0
投票

您可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.