具有两个关联模型的ActiveRecord查询

时间:2013-04-11 02:19:40

标签: ruby-on-rails ruby rails-activerecord

我有两个模型,DealUser。用户has_many交易,交易belongs_to用户(创建交易的用户)。用户具有属性roles,其中user.roles是数组。

我想查找角色包含"developer"的用户创建的所有交易。我习惯为数据库查询编写SQL,所以我在这里遇到了麻烦。

3 个答案:

答案 0 :(得分:3)

@deals = Deal.joins(:users).where(:users => { :roles => ['developer'] })

参考:http://api.rubyonrails.org/classes/ActiveRecord/Base.html

答案 1 :(得分:1)

我认为自己是一个sql穴居人,但您可以执行以下操作:Deal.includes(:users).where(:users => {:role => 'developer'})或者查询您的用户角色。

答案 2 :(得分:1)

有两种选择:

@deals = Deal.select{|d| d.user.roles.include?("developer")}

或者

@deals = User.select{|u| u.roles.include?("developer")}.map(&:deals).flatten

我更喜欢第一个,但第二个可能会更快,具体取决于你有多少交易和用户。