gpt4 book ai didi

ruby-on-rails - 使用 .map 函数给出 PG::GroupingError: ERROR: column "materials.id"in Rails App

转载 作者:太空宇宙 更新时间:2023-11-03 16:16:28 27 4
gpt4 key购买 nike

对于有经验的程序员来说,这可能是一个简单的问题,但由于我是在积累经验,所以我似乎被困在这个问题上......请帮助!!

我正在通过构建应用程序来学习 Ruby on Rails。我正在使用 f.select供我的用户选择他们使用的某种类型的 Material 。然后用户可以为每种 Material 插入一定量的重量。那部分工作正常。

然后我希望用户能够在名为“views/pages/home.html.erb”的 View 中看到他使用了多少公斤的每种 Material

我能够显示 :material_weight 的总量在 View 中,但是当我想显示 :material_weightMATERIAL_TYPES 分类通过使用 .map.group . Rails 抛出这个错误:

PG::GroupingError: ERROR: column "materials.id" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT "materials".* FROM "materials" WHERE "materials"."user_id" = $... ^ : SELECT "materials".* FROM "materials" WHERE "materials"."user_id" = $1 GROUP BY "materials"."material_type"

对于@material_heavy pages_controller.rb 中的行

我知道如何对用户选择的每种 Material 类型的重量进行分类,但我不确定该怎么做。谁能告诉我

已编辑 @material_heavy 线
类 PagesController < ApplicationController

  def home
@materials = current_user.materials
@material_heavy = current_user.materials.group(:material_type).map { |mt| mt.(['Heavy'].group.sum(:material_weight)) }
end
end

在我的 material.rb模型我有 tis 片段

class Material < ActiveRecord::Base
MATERIAL_TYPES = [['Heavy'], ['Medium'], ['Mild'], ['Soft']]
end

添加 Material 表schema.rb 的 Material 部分

create_table "materials", force: :cascade do |t|
t.string "material_type"
t.decimal "material_weight"
t.decimal "material_cost"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.datetime "date"
end

这里是输入表单 f.select位于

  <div class="field">
<%= f.label :date, class: 'form-text'%>
<%= f.date_select :date %>
</div>
<br />
<div class="field">
<%= f.label :material_type %>
<%= f.select(:material_type, options_for_select(Material::MATERIAL_TYPES)) %>
</div>

<br>
<div class="field">
<%= f.label :material_weight %> :<%= f.number_field :material_weight, class: 'form-fields' %> -kg.
</div>
<br />

<div class="field">
<%= f.label :material_cost %> :
<%= f.number_field :material_cost, class: 'form-fields' %> -Kr.
</div>

<br>

<div class="actions">
<%= f.submit "Add Material" %>
</div>
<% end %>

最佳答案

这将为您提供 material_type = 'Heavy' 的 material 对象集合:

@current_user.materials.where(material_type: 'Heavy')

如果您不介意在模型级别进行添加:

 @current_user.materials.where(material_type: 'Heavy').pluck(:material_weight).reduce(:+)

关于ruby-on-rails - 使用 .map 函数给出 PG::GroupingError: ERROR: column "materials.id"in Rails App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43243653/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com