按关联AR对象的属性值选择ActiveRecord对象

时间:2016-02-17 14:22:59

标签: ruby-on-rails activerecord

给定与另一个ActiveRecord类(例如标签)关联的ActiveRecord类(例如帖子),如何仅选择与具有特定属性值的标签关联的帖子(例如Tag.name =“Music” “)。

到目前为止,我在Posts上定义了一个类方法:

def self.tag_filter(tag_name, posts)
  unless tag_name == '' || posts == nil
    postlist = posts
    posts = []
    postlist.all.each do |post|
      post.tags.each do |tag|
        if tag.name == tag_name 
          posts<<post
        end
      end
    end
  end
  posts
end

在控制器中使用它,如下所示:

def posts_filter
  @user = current_user
  @posts = @user.posts

  tag_filtered_posts = Post.tag_filter(params[:tag_select], @posts)
  ..
end

但是从一开始就感觉不对,我觉得这应该更容易实现。我错过了什么?

1 个答案:

答案 0 :(得分:2)

您可以使用joins方法:

Post.joins(:tags).where(tags: { name: tag_name })