rails中的Active Record Query

时间:2017-06-11 18:10:42

标签: ruby-on-rails activerecord

我想找到所有与之关联的评论的博文。如何在rails控制台中使用ActiveRecord查询执行此操作?

blog_post   has_many:评论

 blog = Blog.all
 blog.find(:comments > 1)

2 个答案:

答案 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可能有一个快捷方式来指定记录的所有字段。