使用Map函数从activerecord :: relation中删除对象

时间:2013-07-02 13:38:36

标签: ruby-on-rails activerecord

我有一个复杂的范围,我正在抓住一份清单。在此清单中,差异类别下有许多任务。我只想要完成的清单,但是一些清单将在没有完成每个类别的情况下完成。所以我需要能够在检查列中是否有任何内容之前检查是否需要每个列。这是我的例子。

scope :complete, lambda {|check_lists| check_lists.map do |check_list|
    not_complete = false

    if check_list.event.booking.video_for_event?
        if check_list.raw_footage_user_id.blank? && check_list.raw_footage_check.blank? then not_complete = true end    
    end

    if check_list.event.booking.eblast_not_blank?
      # more checking...
    end

    if check_list.event.booking.on_site_not_blank?
      # more checking...
    end

    if not_complete then reject end
end } #If videos, verify video items. if eblasts, verify eblast items, etc...

所以基本上我需要知道如何通过从被映射的数组中删除non_complete对象来完成它。

1 个答案:

答案 0 :(得分:0)

如果我清楚地理解你只想要完成的清单

基本上你必须在它是真的时返回清单,否则返回nil,然后用紧凑的方法消除结果数组中的nils ...这是select的工作

checklists.map do |checklist| 
  # ....
  checklist unless not_completed
end.compact

或更简洁:

checklists.select do |checklist| 
  # ....
  !not_completed
end