【问题标题】:Nested forms rails field does not update嵌套表单 rails 字段不更新
【发布时间】:2016-04-04 13:59:09
【问题描述】:

我正在尝试做这里提到的嵌套表单。 http://guides.rubyonrails.org/form_helpers.html#nested-forms

目标如下:我有多个colli,其中一个复选框可以选中。 colli 列表可以删除或修改,但检查及其信息需要保留。

型号

class Colli < ActiveRecord::Base
  has_one :check, foreign_key: "subcontainerid", primary_key: "colliid"
  accepts_nested_attributes_for :check, allow_destroy: true
end

class Check < ActiveRecord::Base
  belongs_to :colli
end

所以每个colli都有一个检查。 colli 表中的 colliid 使用子容器 id 创建了与检查表的链接。

控制器

在 colli 控制器中,我将 check_attributes 列入白名单。

def colli_params
  params.require(:colli).permit(:colliid, :collinaam, check_attributes: [:id, :checked])
end

表格

我的表单是这样的。

<%= form_for(@colli) do |f| %>
  <% if @colli.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@colli.errors.count, "error") %> prohibited this colli from being saved:</h2>

      <ul>
      <% @colli.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <%= f.fields_for :checks do |checks_f| %>
  <p>check start</p>
  <div class="field">
    <%= checks_f.label :checked %><br>
    <%= checks_f.check_box :checked %>
  </div>
  <% end %>

  <div class="field">
    <%= f.label :colliid %><br>
    <%= f.text_field :colliid %>
  </div>

  <div class="field">
    <%= f.label :collinaam %><br>
    <%= f.text_field :collinaam %>
  </div>

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

<% end %>

如果我做 form_for :check 我看不到复选框。当我执行 form_for :checks 时,我看到一个复选框,但它不起作用。单击提交时,我看到以下错误:

undefined method `checked' for nil:NilClass

<p>
  <strong>Checked:</strong>
  <%= @colli.check.checked %>
</p><p>
  <strong>Collinaam:</strong>
  <%= @colli.collinaam %>

这意味着它没有被保存。有人知道如何解决这个问题吗?

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4 nested-forms


    【解决方案1】:

    尝试将此添加到您的表单中 -

    <%= f.fields_for :checks, @colli.check.build do |checks_f| %>
     <p>check start</p>
     <div class="field">
      <%= checks_f.label :checked %><br>
      <%= checks_f.check_box :checked %>
     </div>
    <% end %>
    

    【讨论】:

    • 这不起作用 undefined method build for nil:NilClass 但如果我在控制器的编辑操作中执行 @colli.build_check 它确实有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多