Ruby on rails 按关联AR对象的属性值选择ActiveRecord对象
给定一个与另一个ActiveRecord类(例如标记)关联的ActiveRecord类(例如Posts),如何仅选择那些与具有特定属性值(例如Tag.name=“Music”)的标记关联的帖子 到目前为止,我在这样的帖子上定义了一个类方法: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
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 })