我有这样的模型结构:
class Forum < ActiveRecord::Base
has_many :topics
class Topic < ActiveRecord::Base
has_many :posts
belongs_to :forum
class Post < ActiveRecord::Base
belongs_to :topic
has_many :post_links
has_many :links, ->{ uniq }, through: :post_links, dependent: :destroy
class PostLink < ActiveRecord::Base
belongs_to :post
belongs_to :link
class Link < ActiveRecord::Base
has_many :post_links
has_many :posts, ->{ uniq }, through: :post_links, dependent: :destroy
现在我想从id = 1获取来自论坛的所有链接,并根据它们在此论坛的帖子中显示的频率排序。
Link.joins(posts: [topic: :forum]).where("forums.id = ?",1).group("links.id").order("count_all DESC").count
它给我像{140 => 10, 12 => 9, 137 => 8}
我想使用Link
关系而不是使用ids的哈希,但我不确定如何更改此查询。
答案 0 :(得分:0)
由于您从最大分组ID's
获取计数,因此无法直接获取有效记录关系,但
您只需从返回的结果中where
中触发Link model
条件即可获得Active record association
,
Link.where(id: (Link.joins(posts: [topic: :forum]).where("forums.id = ?",1).group("links.id").order("count_all DESC").count).keys)
返回,
#<ActiveRecord::Relation [#<Link...]
答案 1 :(得分:0)
我设法用这个查询来解决它:
Link.joins(posts: [topic: :forum]).where("forums.id = ?",1)
.group("links.id").order("count_links_id DESC")
.select("links.*, COUNT(links.id) AS count_links_id")
答案 2 :(得分:0)
在查询中使用select
应返回ActiveRecord :: Relation。试试这个:
Link.select("links.*, COUNT(links.id) as link_count").joins(posts: [topic: :forum]).where("forums.id = ?",1).group("links.id").order("link_count DESC").count
由于我没有你的模型结构和关系,我无法测试这个,但我用类似的查询做到了。使用select
您将获得一个关系。
links.*
将返回Link模型的所有列/属性。如果您只需要特定属性(例如链接的网址),请改用link.url
。