例
class User has_many :tickets end
我想创建一个包含用户计数凭证逻辑的关联,并在include(user has_one ticket_count)中使用它
Users.includes(:tickets_count)
我试过了
has_one :tickets_count,:select => "COUNT(*) as tickets_count,tickets.user_id ",:class_name => 'Ticket',:group => "tickets.user_id",:readonly => true User.includes(:tickets_count) ArgumentError: Unknown key: group
在这种情况下,关联查询在include中应该使用count与group by …
如何使用rails实现?
更新
UPDATE2
我知道sql我知道如何用联接选择这个,但我的问题现在就像“如何获取数据”.我的问题是关于建筑协会,我可以使用包括.谢谢
UPDATE3
我尝试创建关联,如用户has_one ticket_count,但是
>看起来像has_one不支持关联扩展
> has_one不支持:group选项
> has_one不支持finder_sql
解决方法
尝试这个:
class User has_one :tickets_count,:select => "user_id,tickets_count",:finder_sql => ' SELECT b.user_id,COUNT(*) tickets_count FROM tickets b WHERE b.user_id = #{id} GROUP BY b.user_id ' end
编辑:
您可以通过使用范围/类方法的组合轻松实现所需
class User < ActiveRecord::Base def self.include_ticket_counts joins( %{ LEFT OUTER JOIN ( SELECT b.user_id,COUNT(*) tickets_count FROM tickets b GROUP BY b.user_id ) a ON a.user_id = users.id } ).select("users.*,COALESCE(a.tickets_count,0) AS tickets_count") end end
现在
User.include_ticket_counts.where(:id => [1,2,3]).each do |user| p user.tickets_count end