2013-04-11 65 views
1

我有两个模型,DealUser。用户has_many交易,以及交易belongs_to用户(创建交易的用户)。用户具有属性roles,其中user.roles是一个数组。有两个关联模型的ActiveRecord查询

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

回答

1

几个选项:

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

或者

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

我更喜欢第一个,但第二个可能会更快取决于如何很多交易和用户。

1

我认为自己是一个sql穴居人,但你可以这样做:Deal.includes(:users).where(:users => {:role => 'developer'})或者你的用户角色被查询。

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

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

+0

嗯,我试图在rails控制台中得到这个错误: “ActiveRecord :: StatementInvalid:Mysql2 :: Error:Unknown''user.roles'in'w here clause':SELECT'deals '。* FROM'deals' INNER JOIN'users' ON''''''id' = 'deals'.'user_id' WHERE' user'.'roles' IN('developer')“ – xxyyxx 2013-04-11 15:17:07

相关问题