ActiveRecord帮助:标签包含的位置

时间:2012-11-10 19:30:17

标签: ruby-on-rails ruby-on-rails-3

我似乎找不到办法做到这一点。一些指导会很棒!

我正在建立一个类似网站的博客,帖子和帖子包含标签。标签和帖子通过连接表保存在一起。我可以通过post.tags访问它们。

我试图整理搜索以显示包含特定标记的所有帖子。 经过一段时间的尝试,这是我提出的最好的:

def tag
 tag = Tag.find_by_title(params[:id])
 p = Post.page(params[:page]).per_page(7).all
 @posts = Array.new
 p.each do |p|
  if p.tags.include? (tag)
    @posts << p
  end
end

这除了分页外都有效。我认为必须有一个简单的where子句来简化这个?

谢谢!

编辑:

这是我的联接表

enter image description here

1 个答案:

答案 0 :(得分:1)

下一个方法应该返回带有标记的帖子数组:

@posts = Post.includes(:tags).where('tags.id' => tag.id)

您只需要保留方法的第一行并在之后添加上面的行。

请注意,要使其正常运行,您应该使用has_and_belongs_to_many在模型中定义帖子和标记之间的关系。