ruby-on-rails – Rails / Postgres:列必须出现在GROUP BY子句
我有一个将用户加入帖子的范围,以便只获得具有可见帖子的用户.这适用于
MySQL,但PG更严格,并抛出错误.
用户模型: belongs_to :account scope :have_posts,joins(:posts).where('posts.visible => true').group('users.id') 控制器: @account.users.have_posts.each do |user| # do stuff end 错误:
它抱怨来自@ account.users的“users.account_id”(因为我显然不希望数据库中的所有用户). 知道怎么解决? 解决方法
问题是GROUP BY子句.如果使用此选项,则无法选择任何非聚合字段,因此SELECT“users”.* […]不起作用.来自Postgres文档:
这样的东西可能有用,虽然凌乱: scope :have_posts,joins('inner join (select user_id from posts where visible = true group by user_id) users_with_posts on users_with_posts.user_id=users.id') 一种替代方案是使用MAX或MIN等聚合函数指定每个选定的字段,但这可能会使范围更长,功能更少. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |