これは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_search
、ActiveRecord::Relation
オブジェクトが必要RubyGemを使用しています。 ActiveRecord::Relation
オブジェクトを返すように、open_headcount
をクラスメソッドからスコープに変更したいのですが、可能かどうかはわかりません。
「open_headcount」を整数としてロールテーブルに追加することはできますか? –
@JesseWolgamott私はそれを避けたいと思いますが、 'Employee'の' after_create'と 'after_update'フックを使って' Role#open_headcount'を設定する必要があるかどうかは確かです。 – clem