在这种多对多关系中查询项目的有效方法是什么? (导轨)

时间:2015-11-03 18:24:06

标签: mysql ruby-on-rails postgresql

我正在尝试查找是否有一种使用Rails / AR查询我的数据库的有效方法。我有点新,所以感谢任何提示。

我正在尝试查询属于特定类别的所有项目。当用户转到/ categories / 5时,他们应该看到类别5中的所有项目。

模特:

  • 项目
  • 标签(又名Items_Categories)
  • 分类

Label是连接表。我成功查询了所有类别的标签。我只是不确定如何查询这些标签中的所有项目。换句话说,我已经进入了连接表,只是不确定如何桥接到另一边。

标签架构:

  • 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

3 个答案:

答案 0 :(得分:2)

尝试使用ActiveRelation对象来检索数组,如下所示: categoryItems = categoryLabels.pluck(:item_id) # [22, 17, 50]

答案 1 :(得分: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

希望这有帮助。

答案 2 :(得分:1)

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

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

相关问题