0

チェックリストを取得する複雑なスコープがあります。このチェックリストには、さまざまなカテゴリの下に多数のタスクがあります。完成したチェックリストだけが欲しいのですが、一部のチェックリストは、すべてのカテゴリが完成していなくても完成します。したがって、列に何かが含まれているかどうかを確認する前に、各列が必要かどうかを確認できる必要があります。これが私の例です。

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 オブジェクトを削除して、それを終了する方法を知る必要があります。

4

1 に答える 1

0

私が明確に理解している場合は、完了したチェックリストのみが必要です

基本的に、チェックリストがtrueの場合はチェックリストを返し、そうでない場合はnilを返してから、結果の配列のnilをコンパクトで削除する必要があります...これはselectの作業です

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

またはより簡潔に:

checklists.select do |checklist| 
  # ....
  !not_completed
end
于 2013-07-02T13:57:04.310 に答える