从嵌套的has_many关系访问项目

时间:2012-11-06 16:03:28

标签: ruby-on-rails-3

我有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>

我如何访问这些申请人?

2 个答案:

答案 0 :(得分:2)

你不能像这样链接has_many个关联。在用户模型上创建has_many :through关联:

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

然后你可以打电话

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

来自guide on ActiveRecord associations

  

has_many:through关联对于通过嵌套的has_many关联设置“快捷方式”也很有用。 [...]

答案 1 :(得分: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])