2012-11-20 37 views
0

我的模型:條件對連接的表 - Rails的

class Review < ActiveRecord::Base 
    belongs_to :business 

class Business < ActiveRecord::Base 
    has_many :reviews 
    has_and_belongs_to_many :categories 

我想在一定類別企業評論:

Review.joins(:business => :categories).where(:business => {:categories => [1,2,3,4]}) 

結果查詢:

SELECT "reviews".* FROM "reviews" INNER JOIN 
"businesses" ON "businesses"."id" = "reviews"."business_id" INNER JOIN 
"businesses_categories" ON "businesses_categories"."business_id" = "businesses"."id" 
INNER JOIN "categories" ON "categories"."id" = "businesses_categories"."category_id" 
WHERE "business"."categories" IN (1, 2, 3, 4) 

但是,我收到以下錯誤:

ActiveRecord::StatementInvalid: PG::Error: ERROR: missing FROM-clause entry 
for table "business" 
LINE 1: ...id" = "businesses_categories"."category_id" WHERE "business"... 

回答

3

使用此:

Review.joins(:business => :categories).where(:categories => { :id => [1,2,3,4] }) 
+0

它的作品!非常感謝 – AlexBrand

+1

非常歡迎!問題是,在使用散列的AR where子句中,它的關鍵是將表和鍵內的值作爲列。所以:企業=? {:categories => 1}轉換爲「where business.categories = 1」。此外,您使用數組嵌套進行連接 - 您不需要將它用於where,order,group等......它用於連接實際上將內部連接嵌套在彼此上,但一旦完成,所有連接的表可以直接通過查詢的其餘部分查看其名稱。 –