Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按关联AR对象的属性值选择ActiveRecord对象_Ruby On Rails_Activerecord - Fatal编程技术网

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

Ruby on rails 按关联AR对象的属性值选择ActiveRecord对象,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,给定一个与另一个ActiveRecord类(例如标记)关联的ActiveRecord类(例如Posts),如何仅选择那些与具有特定属性值(例如Tag.name=“Music”)的标记关联的帖子 到目前为止,我在这样的帖子上定义了一个类方法: def self.tag_filter(tag_name, posts) unless tag_name == '' || posts == nil postlist = posts posts = [] postlist.all

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

到目前为止,我在这样的帖子上定义了一个类方法:

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
但这从一开始就感觉不对,不知何故,我觉得这应该更容易实现。我缺少什么?

您可以使用以下方法:

您可以使用以下方法:


贴子和标签之间的关系是什么?这是一个has_和_属于_-many关系。贴子和标签之间的关系是什么?这是一个has_和_属于_-many关系。这对@user.posts这样的关联关系对象也有效吗?我想这会起作用:
user.joins(posts::tags)。其中(标签:{name:tag name})
我现在这样做了,它似乎有效:
user.posts.joins(:tags)。where(tags:{name:“default”})
这对@user.posts这样的关联关系对象也有效吗?我想这会有效:
user.joins(posts::tags)。where(tags:{name:tag name})
我现在这样做了,它似乎有效:
user.posts.joins(:tags).where(标记:{name:“default”})
def posts_filter
  @user = current_user
  @posts = @user.posts

  tag_filtered_posts = Post.tag_filter(params[:tag_select], @posts)
  ..
end
Post.joins(:tags).where(tags: { name: tag_name })