2016-05-16 10 views
1

私はモデルUserを持っています。 私は、次の関連付けを持っている:Rails 4.2.1で別の関連付けを再利用する方法は?

has_many :user_schools 
has_many :schools, through: :user_schools, source: :school 
has_many :active_schools, -> {where(active: true)}, through: :user_schools, source: :school 

は、どのように私は次のことを繰り返すことなく:active_schoolsのための関連付けを書くこと:schoolsを再利用することができます

through: :user_schools, source: :school 

答えて

1

あなたがそれを必要とするすべてのクエリーメソッドである場合は、単に定義User

class User < ActiveRecord::Base 
    scope :active_schools, -> { schools.where(active: true) } 
end 

と、このように使用上のスコープ

user.active_schools 

またはSchool

class School < ActiveRecord::Base 
    scope :active, -> { where(active: true) } 
end 

の範囲を定義し、この

user.schools.active 

のようにそれを使用したり、その両方を行うと、User上の範囲にSchoolにスコープを使用します。

+0

「どこで(アクティブ:真)」ではなく、「schools.where(アクティブ:真)」でなければならないと思います。 –

+0

@Dave、私は 'schools.active'を連想の形で定義したかったのです。これは間違いなく一般的に使用されていますが、複数のメソッド呼び出しを連鎖させたい場合は、関数を作成する方が良いですし、関連付けの観点から関数を定義したかったのです。 –

関連する問題