2012-01-25 9 views
0

これはRuby 1.9.3/Rails 3.2プロジェクトです。ActiveRecordクエリカウントリレーションの数

RoleというモデルとEmployeeというモデルがhas_many/belongs_toの関係でリンクされているとします。役割には多くの従業員があり、従業員は役割に属しています。これらのモデルは両方とも、多くの従業員と役割を持つStoreオブジェクトに属しています。

各ロールにはtarget_headcountという属性があり、その位置にある理想的な従業員数を表します。そこから、私はRoleのために次のような方法があります:

class Role < ActiveRecord::Base 
    # ... 

    # Number of employees currently filling this role. 
    def current_headcount 
    employees.count 
    end 

    # Number of headcount above or below the target. 
    def variance 
    current_headcount - target_headcount 
    end 
end 

よく、私はオープン人員が存在するため、各役割のコレクションを取得する必要があります。私は役割のための次のクラスメソッドを使用して、これをやっていた:

def self.open_headcount 
    all.select { |r| r.variance < 0 } 
end 

しかし、私は今meta_searchActiveRecord::Relationオブジェクトが必要RubyGemを使用しています。 ActiveRecord::Relationオブジェクトを返すように、open_headcountをクラスメソッドからスコープに変更したいのですが、可能かどうかはわかりません。

+0

「open_headcount」を整数としてロールテーブルに追加することはできますか? –

+0

@JesseWolgamott私はそれを避けたいと思いますが、 'Employee'の' after_create'と 'after_update'フックを使って' Role#open_headcount'を設定する必要があるかどうかは確かです。 – clem

答えて

0

これは非常に古いですが、SQLのクエリを使用してロールの従業員数を数え、そこからターゲット列の値を差し引いてFTRを実行した可能性があります。