【问题标题】:What's wrong with my nested attributes?我的嵌套属性有什么问题?
【发布时间】:2016-12-15 06:16:41
【问题描述】:

我尝试在周计划中添加许多小时,因此我编写了代码: #app/models/week_plan.rb 类 WeekPlan

# app/model/hour.rb
class Hour < ApplicationRecord
  belongs_to :weekplan
end

# app/controllres/weekplan_controller.rb
class WeekplansController < ApplicationController

  def new
    @weekplan = WeekPlan.new
    7.times { @weekplan.hours.build }
  end

  private
    def set_weekplan
      @weekplan = WeekPlan.find(params[:id])
    end

    def weekplan_params
      params.require(:weekplan).permit(hours_attributes: [ :date_start ])
    end
end

最后,app/views/weekplans/new.html.rb

<h1>New Plan</h1>

<%= form_for @weekplan do |f| %>
  <%= f.fields_for :hours do |hour| %>
    <p>
        <%= f.label :user_id %><br>
        <%= f.select :user_id, User.all.collect { |p| [ p.name, p.id ] }, include_blank: true %>
    </p>

    <p>
        <%= f.label :date %><br>
        <%= f.datetime_field :date %>
    </p>

    <p>
        <%= f.label :date_start %><br>
        <%= f.datetime_field :date_start %>
    </p>

    <p>
        <%= f.label :date_end %><br>
        <%= f.datetime_field :date_end %>
    </p>
  <% end %>
  <%= f.submit %>
<% end %>

但是,当我运行我的应用程序时,我得到了错误:

(undefined method `user_id' for #<WeekPlan id: nil, created_at: nil, updated_at: nil>):

我不明白,bug 隐藏在哪里?

【问题讨论】:

  • 是的,但我在 week_plans 中不需要它,因为 hoursuser_id 列。

标签: ruby-on-rails ruby nested-attributes


【解决方案1】:

您应该在fields_for :hours 中使用hour.labelhour.select 等:

f.fields_for :hours do |hour| %>       # <======= hour was not used, use it
    <p>
        <%= hour.label :user_id %><br> # <======= hour, not `f`
        <%= hour.select :user_id, User.all.collect { |p| [ p.name, p.id ] }, include_blank: true %>
        # same with all other nested object's fields

附: db 数据的 Ruby 处理不好:

User.all.collect { |p| [ p.name, p.id ]

为此使用 db:

User.pluck(:name, :id)

【讨论】:

猜你喜欢
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
相关资源
最近更新 更多