嵌套表单 rails 字段不更新
Nested forms rails field does not update
我正在尝试做这里提到的嵌套表格。
http://guides.rubyonrails.org/form_helpers.html#nested-forms
目标如下:我有多个colli,一个checkbox可以勾选。可以删除或修改 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 table 的 colliid 使用子容器 ID 创建了一个 link 并检查 table。
控制器
在 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 %>
这意味着它没有被保存。有人知道如何解决这个问题吗?
尝试将此添加到您的表单中 -
<%= 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 %>
我正在尝试做这里提到的嵌套表格。 http://guides.rubyonrails.org/form_helpers.html#nested-forms
目标如下:我有多个colli,一个checkbox可以勾选。可以删除或修改 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 table 的 colliid 使用子容器 ID 创建了一个 link 并检查 table。
控制器
在 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 %>
这意味着它没有被保存。有人知道如何解决这个问题吗?
尝试将此添加到您的表单中 -
<%= 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 %>