查询此多对多关系中项目的有效方法是什么? (Rails)

问题描述:

我试图找到是否有一种有效的方式来查询我的数据库使用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

什么项目表 –

如果标签不包含其他字段,则不需要它在控制器中。 就试试这个:

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

尝试摘去ActiveRelation对象检索数组,像这样: categoryItems = categoryLabels.pluck(:item_id) # [22, 17, 50]

假设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 

希望这有助于。