2

私には、ユーザー、学校、申請者の3つのモデルがあります。

ユーザーhas_many :schools、学校has_many :applicantsbelongs_to :userおよび申請者belongs_to :school

特定のユーザーに属する学校に属する志願者をリストできるようにしたいと思います。私はそれができるはずだと思った

current_user.schools.applicants.paginate(page: params[:page])

このエラーが発生しているため、これは機能していません。

undefined method `applicants' for #<ActiveRecord::Relation:0x007fb9da274110>

これらの申請者にアクセスするにはどうすればよいですか?

4

2 に答える 2

2

そのような関連付けを連鎖させることはできませんhas_manyhas_many :throughユーザーモデルに関連付けを作成します。

# app/models/user.rb
has_many :applicants, :through => :schools

その後、あなたは呼び出すことができます

current_user.applicants.paginate(page: params[:page])

ActiveRecordアソシエーションに関するガイドから:

has_many:throughアソシエーションは、ネストされたhas_manyアソシエーションを介して「ショートカット」を設定する場合にも役立ちます。[...]

于 2012-11-06T16:25:11.383 に答える
0

あなたはこれを行うことはできません。アソシエーションは、前のアソシエーションが単一のレコードに解決される場合にのみチェーンできます(つまり、チェーンすることはできますがbelongs_to.belongs_to.has_many、決してチェーンすることはできませんhas_many.has_many-それhas_many :throughが目的です)。

応募者が必要な場合は、実際に応募者を選択する必要があります。

Applicant.where(school_id: current_user.schools.pluck(:id)).paginate(page: params[:page])
于 2012-11-06T16:24:38.097 に答える