【问题标题】:Refactoring a rake task to be less repetitive重构 rake 任务以减少重复性
【发布时间】:2020-07-19 03:06:37
【问题描述】:

这里是 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】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      • 2020-02-17
      • 2017-06-10
      相关资源
      最近更新 更多