查询

时间:2015-12-16 08:08:35

标签: mysql ruby-on-rails ruby

@lists = List.joins("LEFT JOIN items ON lists.id = items.list_id").group("lists.id").order("items.priority")

我有两个实体列表和项目。 每个项目都与一个列表相关联。现在我正在以表格形式查看列表和项目 其中表的标题包含列表名称,<tbody>包含该特定列表的项目名称,每个项目在保存时都有一些优先级(例如1,2,3 ..)。现在,在显示我想按优先级排序项目,但我的查询是按优先级排序列表。对此有何解决方案?

2 个答案:

答案 0 :(得分:1)

以下语句将为您提供列表中的所有记录,并且还会急切加载相关项(按优先级排序)。

@lists = List.includes(:items).order('items.priority')

您可以通过拨打以下电话来访问列表中按优先级排序的项目:

list.items # where list is one of the records in @lists

答案 1 :(得分:0)

您正在提取List,并使用Item加入它们。由于ActiveRecord的工作方式,您将获得List的结果列表,其中嵌入了Item

如果要循环覆盖项目,则需要加载项目而不是列表。

@items = Item.includes(:list).order("priority")

上面的示例使用includeseager load关联的列表记录,避免了N + 1查询问题。