我有一个复杂的范围,我正在抓住一份清单。在此清单中,差异类别下有许多任务。我只想要完成的清单,但是一些清单将在没有完成每个类别的情况下完成。所以我需要能够在检查列中是否有任何内容之前检查是否需要每个列。这是我的例子。
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对象来完成它。
答案 0 :(得分:0)
如果我清楚地理解你只想要完成的清单
基本上你必须在它是真的时返回清单,否则返回nil,然后用紧凑的方法消除结果数组中的nils ...这是select的工作
checklists.map do |checklist|
# ....
checklist unless not_completed
end.compact
或更简洁:
checklists.select do |checklist|
# ....
!not_completed
end