class Cafe < ActiveRecord::Base
belongs_to :user
has_many :posts, dependent: :destroy
has_many :tags, dependent: :destroy
end
这是cafe.rb模型
class Post < ActiveRecord::Base
belongs_to :cafe
belongs_to :user
end
这是postq.rb。帖子就像回复一样。
我想创建新的cafe数组并按cafe.posts.count对其进行排序。 最后,我将展示前两家有很多回复的咖啡馆。
我尝试了一些排序代码,例如
@cafe_by_posts = Cafe.joins(:post).order('posts.size dsc')
但它没有用。错误说咖啡馆与邮政无关。 如何通过关联的模型计数对ruby数组进行排序?
我不擅长英语,我很感激你的答案!
答案 0 :(得分:3)
关系名称为posts
而非post
,请注意:
has_many :posts, dependent: :destroy
排序应该通过SQL约束来完成。
MySQL中没有dsc
排序顺序,它是desc
。那么,你走了:
@cafe_by_posts = Cafe.joins(:posts)
.group('posts.cafe_id')
.order('COUNT(posts.cafe_id) DESC')
.limit(2) # to retrieve only 2 topmost records
答案 1 :(得分:2)
嘿mysql
你可以直接使用
@cafe_by_posts = Cafe.joins(:posts).group("posts.cafe_id").order('count(posts.cafe_id) desc')
您可以使用limit
@cafe_by_posts = Cafe.joins(:posts).group("posts.cafe_id").order('count(posts.cafe_id) desc').limit(2)
答案 2 :(得分:0)
您可以使用counter_cache
class Post < ActiveRecord::Base
belongs_to :cafe, counter_cache: true
belongs_to :user
end
然后添加迁移:
add_column :cafe, :posts_count, :integer, default: 0
然后你可以查询为
@cafe_by_posts = Cafe.order('posts_count DESC')