2009-09-01 5 views
1

RoRアプリケーションでは、2つのモデル間に標準的なマスター/ディテール関係があります。詳細レコードには、何かの有無を示す4つのブール値フィールドが含まれています。レールの下でブール値を数える

詳細レコードを表示するとき、4つのブールフィールドのそれぞれについてブール値がTrueに設定されたレコードの数を示すサマリーを追加したいとします。

例: 日付|ブールフィールド1 |ブールフィールド2 | 2009/08/29 | | T | | T | 2009/08/30 | | T | F | 2009/08/31 | F | | T | 2009/09/01 | F | | T |

合計:4 2 3

私は@ entries.countのようなものを使用してみました([「ブールフィールド1」、真]) 私はそれを見る方法、これらの値を計算する方法は2つあります。一つはSQLクエリ(醜い)を実行するか、(醜い)カウンタを使ってビューレベルでモデルを実行します。私が望むものを達成するための他の方法はありますか?

@entries.select {|r| r.bool_field1}.size 

答えて

5

をありがとうそれはnamed_scopeとあなたのコントローラ/ビューはまだかなり見えるでしょう

+0

'@のentries.select(&::bool_field1)ではなく – dimus

1

SQLはレールがするそれを作り、それはかなり効率的である、ちょうど作るほど醜いではないかもしれませ、お時間

アンゲロスArampatzis

4

あなたはどちらかを行うことができます:

@entries.count(:conditions => { :boolean_field_1 => true }) 

することはできかなりこれまで名前の範囲を実行して:

named_scope :booleans, :conditions => { :boolean_field_1 => true }) 

、その後

@entries.booleans.count 

それとも、すでに(というよりも、選ばれた少数の)配列内のすべてのアイテムを持っている場合データベースにヒットしたくない...

Railsには?メソッドをすべての列に適用します。あなたが持っている間、だから:

@entry.boolean_field 

あなたがまたしている:

@entries.collect(&:boolean_field?).length 
+0

.size'

@entry.boolean_field? 

だから、これを行うことができますこれは、選択された答えにする必要があります!ありがとうございました –