我有两种模式:
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
end
我正在尝试找到至少有一条评论的最新帖子。
我试过了:
@post = Post.find_by_sql("SELECT *, count(comment.id) AS num_of_comments
FROM post
INNER JOIN comment ON post.id = comment.post_id
WHERE num_of_comments >= 1").last
但是错误地说num_of_comments是一个未知的列。
然后我在Post上尝试了一种方法,但这不起作用:
def self.has_been_commented
where("comments.count <= 1")
end
然后我开始研究范围,并看到.joins方法,但不知道我怎么能指定另一个过滤器。 类似的东西:
scope :has_been_commented, joins(:comments)
但是我不确定如何指定where(:comments.count&gt; = 1)
抱歉,如果这令人困惑......
答案 0 :(得分:0)
你有多个comments
和单数comment
混合在一起。如果您遵循“Rails方式”,那么一切都将是复数,甚至是数据库名称,除了您的类名。目标是确保生成的SQL与您拥有的数据库表匹配。
答案 1 :(得分:0)
我找到了问题的答案:
Post.find(:all, :joins => "INNER JOIN comment ON comment.post_id = post.id", .
:select => "post.*, count(comment.id) comment_count",
:group => "comment.post_id HAVING comment_count >= 1").last