2011-10-23 29 views
0

我有一個具有多個參與者會議模型屬性。參與者有幾個布爾屬性:接受,被拒絕等。我想要檢查會議的所有參與者,如果他們都被接受==真。 是否有一個快速的方法來檢查子對象相似,總結方法所有布爾屬性(如TOTAL_PRICE = items.sum(&:價格))?檢查布爾在Rails的所有子對象

回答

3

你可以使用count

all_true = items.count(:conditions => [ 'bool_column = ?', true ]) == items.count 

如果你沒有空值在布爾列擔心:

all_true = items.count(:conditions => [ 'bool_column = ?', false ]) == 0 

或者你可以做這種方式(由klochner的建議),以獲得大約t他平時NULL問題,避免雙重count

all_true = items.count(:conditions => [ 'bool_column = ? or bool_column is null', false ]) == 0 

你可以一次過檢查幾個布爾列。

+1

第二版本將使用空的工作,如果你只需要添加「bool_column爲空或bool_column不打分貝=「假 – klochner

+0

@klochner:好,謝謝指出了這一點,我已經修補相應的答案。 –

4
meeting.participants.all?(&:acctepted) 

看看在enumerable module

+1

要知道,這個解決方案加載所有參與者到內存中,然後循環通過他們,而不是從下面畝(更好的)解決方案,它應該可以登錄(N) – klochner

+0

視情況而定。如果參與者已經加載,我的解決方案不會打擾數據庫的額外查詢,如果不是mu的解決方案更好。 – topek

+0

謝謝klockner。我沒有意識到。 – AdamNYC