我有两个模型: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')
这样做的正确方法是什么?
答案 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