2015-11-03 33 views
0

我試圖找到是否有一種有效的方式來查詢我的數據庫使用Rails/AR。我有點新,所以謝謝任何提示。查詢此多對多關係中項目的有效方法是什麼? (Rails)

我試圖查詢屬於特定類別的所有項目。當用戶轉到/ categories/5時,他們應該看到Category-5中的所有項目。

型號:

  • 項目
  • 標籤(又名Items_Categories)
  • 類別

標籤是聯接表。我成功查詢了來自類別的所有標籤。我只是不知道如何查詢這些標籤中的所有項目。換句話說,我已經將它加入到連接表中,只是不確定如何連接到另一端。

標籤模式:

  • ID
  • CATEGORY_ID
  • ITEM_ID

這裏是我的控制器迄今:

categoryLabels = Label.where(category_id: params[:id]) 
categoryItems = ??? 
render json: categoryItems 

這裏的查詢我的例子正在看,試圖去確定如何獲取具有5類別的項目。我想「提取」給定類別中每個項目的(數組?)。我很想繞過categoryLabels,但我不確定這是否正確/有效。

select * from labels; 
id | category_id | item_id 
1   5    22 
2   5    17 
3   2    50 
+0

什麼項目表 –

回答

1

如果標籤不包含其他字段,則不需要它在控制器中。 就試試這個:

category = Category.find(params[:id]) # get category 
items = category.items # get items 
render json: items 

瞭解更多關於此http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association

+1

正是我一直在尋找很多一對多的方法,謝謝。我現在會檢查你的鏈接。我之前遇到過它,但不知道它是否涵蓋了查詢(例如,與關係的初始設置相比)。再次感謝。 – TCannadySF

2

嘗試摘去ActiveRelation對象檢索數組,像這樣: categoryItems = categoryLabels.pluck(:item_id) # [22, 17, 50]

1

假設Item table作爲

項目(ITEM_ID,ITEM_ID)

SELECT Items.`item_name` 
FROM 
Labels INNER JOIN Items.`item_id` = Labels.`item_id` 
WHERE Labels.category_id=5 

希望這有助於。

相關問題