我想找到所有与之关联的评论的博文。如何在rails控制台中使用ActiveRecord查询执行此操作?
blog_post has_many:评论
blog = Blog.all
blog.find(:comments > 1)
答案 0 :(得分:-1)
你的问题有点模糊,但我仍然试着回答它。
最简单的方法可能是您class BlogPost < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :blog_post, dependent: :destroy, counter_cache: true
end
模型中评论的计数器缓存。如果你在一篇博文中有很多评论,这个解决方案也可以更好地扩展。
例如:
comments_count
然后只需添加一个迁移,将class AddCommentsCountToBlogPosts < ActiveRecord::Migration[5.0]
def change
add_column :blog_posts, :comments_count, :integer
end
end
添加到博客帖子表中,Rails会处理其他所有内容。
posts_with_comments = BlogPost.where('comments_count >= ?', 1)
现在你可以这样做:
(function($) {
$(document).ready(function() {
$('.navigation').addClass('slideIn');
});
答案 1 :(得分:-1)
blog_ids_with_comments = Blog.select(:id).
joins(:comments).
groupBy('blogs.id').
having('count(comments.id) > 1')
blogs = Blog.find blog_ids_with_comments
您必须将此SQL转换为ActiveRecord查询:
select blogs.id from blogs join comments on blog.id = blog_id
group by blogs.id having count(comments.id) > 1;
如果您选择所有Blog
字段并按所有Blog
字段分组,则实际上可以将其减少到一行。 Rails可能有一个快捷方式来指定记录的所有字段。