重构 rake 任务以减少重复性

Refactoring a rake task to be less repetitive

这里 Rails 上的 Ruby 还很新。我正在尝试重构一个 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