Rails通过HABTM关系查找记录

时间:2015-10-18 23:42:32

标签: ruby-on-rails has-and-belongs-to-many

我有两个模型:BlogPost和BlogCategory,它们具有has_and_belongs_to_many关系。我希望能够显示所有具有特定类别的博客帖子,但我无法弄清楚如何。我觉得这是一个非常普遍的事情所以应该有一些" rails magic"这样做的方式我不必编写复杂的SQL查询。我试过这个:

@blog_posts = BlogPost.find(:all, :conditions => ["blog_category.id=?", params[:id]])

但它给了我这个错误:

PG::UndefinedTable: ERROR: missing FROM-clause entry for table "blog_category" LINE 1: SELECT "blog_posts".* FROM "blog_posts" WHERE (blog_categor... ^ : SELECT "blog_posts".* FROM "blog_posts" WHERE (blog_category.id='5')

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

这就是你需要的:

BlogPost.joins(blog_categories).where(blog_categories: { id: params[:id] })

请注意,如果您需要查找多个类别,则可以通过ids传递params[:id]数组。

答案 1 :(得分:1)

您是否在使用旧的Rails应用程序?您正在使用ActiveRecord的弃用表示法(现在已有几年,自Rails 3起)。如果您检查API,则无法找到条件选项。所以一定要先检查一下。

假设您的关系设置正确,它就像以下一样简单:

category = Category.find(params[:id])
posts = category.posts