【发布时间】:2014-02-03 15:22:20
【问题描述】:
我对如何通过 has_many through 关系分组和获取数据感到困惑。我当前的模型如下所示:
class User < ActiveRecord::Base
has_many :project_items, dependent: :destroy
has_many :ingredients, through: :project_items
end
class Ingredient < ActiveRecord::Base
has_many :project_items
end
class ProjectItem
belongs_to :user
belongs_to :ingredient
end
这使我可以从我的角度调用以下内容:
<%= render partial: "users/project_item", collection: @project_items, as: :ingredient %>
@project_items 在我的控制器中定义为:
@project_items = @user.ingredients
指向当前仅输出名称和数量以及创建时间的 _project_item 部分。
<li>
<span class="span2"><%= ingredient.name %></span>
<span class="span2"><%= ingredient.quantity %></span>
<span class="span3"><%= @user.pantry_items.find_by(:ingredient_id => ingredient.id).created_at %></span>
</li>
这很好用并且输出所有正确的数据。但是,该数据库具有来自不同项目的相同成分的多个实例。我正在寻找执行以下操作
1.按名称分组,仅列出一次相同的名称
如果我使用@user.ingredients.group_by(&:name),则不会返回任何结果。如果我使用 `@user.ingredients.group('name') 我会接到以下电话:
: SELECT "ingredients".* FROM "ingredients" INNER JOIN "project_items" ON "ingredients"."id" = "project_items"."ingredient_id" WHERE "project_items"."user_id" = $1 GROUP BY name
但是在渲染时会出现错误:PG::Error: ERROR: column "ingredients.id" 必须出现在 GROUP BY 子句中或用于聚合函数中
2。是否可以添加并返回分组结果的列?例如我有:
Name Quantity
Oak 2x2 2
Oak 2x2 4
返回 Oak 2x2 6?
我猜它看起来像 @user.ingredients.select('ingredients, sum(quantity) ),但我不确定如何将它包含在分组中并让它在我的视图中正确输出。
【问题讨论】:
标签: ruby-on-rails postgresql ruby-on-rails-4 associations grouping