我有一个rails 4,它有一个与标签模型相关的Post模型的habtm关系。 标签具有名称字段和类别字段。多个标签可以具有相同的类别。
我需要一个只显示至少有一个属于“foo”类别标签的帖子的视图。 Foo是静态的,永远都是“foo”。
我已经能够在我的帖子控制器中使用此代码使其工作:
def myview
ids = []
Tag.where(category: 'foo').each do |tag|
tag.posts.each do |post|
ids << post.id
end
end
@posts = Post.where(id: ids).all
end
尽管工作我的代码看起来很难读。
我确信rails提供的方式类似于“@posts = Post.where标签类别包括'foo'.all”,但我无法找到方法。我确定我错过了一些非常虚伪的东西。
答案 0 :(得分:1)
Post.joins(:tags).where('tags.category =?',“foo”)。all
评论中的答案是,例如,您不希望tag
查询,但可能希望在您的视图中包含与tag
相关的一些信息。使用includes
,您将避开N+1 problem。