Rails SQL 计数

PMP*_*PMP 2 sql sqlite ruby-on-rails count

我有一个 Posts 表和一个 Sec_photo 表:

class Post < ActiveRecord::Base
  has_many :sec_photos
Run Code Online (Sandbox Code Playgroud)

我正在尝试做一个高级搜索表单,它posts根据它们的总和找到sec_photos@posts = @posts.where(:sec_photos.count > 2)失败,我在网上查看并尝试了许多其他解决方案,但似乎都不起作用。

有人有什么想法吗?

PS:该行必须采用以下形式@posts = @posts.where与其他条件相符。

高级搜索可搜索其他字段,例如category_id 和location_id 等

@posts = Post.all
     @posts = @posts.where('category_id = ?', @advanced_search.category_search) if @advanced_search.category_search.present?
     @posts = @posts.where('location_id = ?', @advanced_search.location_search) if @advanced_search.location_search.present?
     @posts = @posts.where("strftime('%m %Y', created_at) = ?", @advanced_search.newdate_search.strftime('%m %Y')) if @advanced_search.newdate_search.present?
Run Code Online (Sandbox Code Playgroud)

最后一个选项是显示 sec_photos 大于 2 或小于 2 的帖子

MrY*_*iji 5

您可以执行以下操作:

@posts = Post.whatever_scopes_you_use
@posts = @posts.joins(:sec_photos).group('posts.id').having('COUNT(sec_photos.id)
> 2')
Run Code Online (Sandbox Code Playgroud)

最后一行将选择所有posts 具有严格超过 2 个 sec_photos关联的内容。当然,您可以轻松地scope从中创建一个,接受一个count变量以使其动态;-)


来自我之前的回答:如何将根据关系计数过滤的结果返回到 RAILS 中的视图?