ActiveRecord查询与嵌套关联的条件

时间:2011-08-11 19:18:34

标签: ruby-on-rails activerecord associations

我有一个Person模型,他拥有多个角色,而角色又属于一个应用程序。我想查询一个人对给定应用程序的所有角色。到目前为止我已经:

p = Person.includes(:roles => [:application]).where(:loginid => 'their_loginid', :roles => {:application_id => 1})

哪个有效,但它是基于Person.roles.application_id的查询;相反,我想基于Person.roles.application.api_key(应用程序的另一个属性)进行查询。

我试过了:

p = Person.includes(:roles => [:application]).where(:loginid => 'their_loginid', :roles => {:application => {:api_key => 'the_api_key'}})

但我收到错误:

no such column: application.api_key

让我认为我对ActiveRecord的使用没有正确地连接表。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

试试这个:

p = Person.includes(:roles => [:application]).where(:loginid => 'their_loginid', :role_id => Application.find_by_api_key('api_key').role_ids)

答案 1 :(得分:0)

试试这个

p = Person.joins.includes(:roles => [:application]).where(:loginid => 'their_loginid', :roles => {:application => {:api_key => 'the_api_key'}})

就我而言,它已经开始了。