2015-10-18 139 views
1

我有两个模型:BlogPost和BlogCategory,它们具有has_and_belongs_to_many关系。我希望能够显示具有特定类别的所有博客帖子,但我无法弄清楚。我觉得这是一个非常普遍的事情,所以应该有一些“轨道魔术”的方式来做到这一点,我不必编写复杂的SQL查询。我尝试这样做:Rails通过HABTM关系查找记录

@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

您是否试过'BlogPost.joins(blog_categories).where(blog_categories:{id:params [:id]})' – Rog

+1

看到我知道这很简单!那就是诀窍,谢谢!如果您将此作为答案输入,我会将其标记为正确的答案。 – kaxla

回答

3

这是你所需要的:

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

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

+0

您是不是指'BlogPost.joins(:blog_categories)'? –

1

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

假设你正确有你的关系建立,它是那么容易,因为:

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

噢,我真的应该能够自己弄清楚。这也行得通,我刚刚看到罗格的回答。谢谢你的帮助! – kaxla