pra*_*vin 4 mysql activerecord ruby-on-rails ruby-on-rails-3.1
我有两个模型公司和角色分别由has_many和belongs_to协会相关.我需要获得一个拥有正确数量角色的公司.
我想出来了
Company.joins(:roles).having("'count(roles.id) = ?', 3")
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有没有积极的记录解决方案?
谢谢.
协会 -
角色belongs_to:公司
公司has_many:角色
因此,标准的选择将是 -
Company.joins(:roles).group(:company_id).having('count(company_id)= ?', 3)
Run Code Online (Sandbox Code Playgroud)
要么
Company.joins(:roles).group(:company_id).having('count(*)= ?', 3)
Run Code Online (Sandbox Code Playgroud)
我知道这不是您正在寻找的答案,但最好的(在性能方面)解决方案是向表中添加一个简单的roles_count列companies,然后添加:counter_cache => true到belongs_to关联声明.Rails负责为您更新该列.
然后,
Company.where("roles_count = ?", 3)
Run Code Online (Sandbox Code Playgroud)
更多信息:http://guides.rubyonrails.org/association_basics.html#belongs_to-counter_cache
| 归档时间: |
|
| 查看次数: |
3639 次 |
| 最近记录: |