【发布时间】:2016-04-19 03:50:21
【问题描述】:
我正在使用 rails5 嵌套形式和 我的嵌套形式如下所示
允许的参数
params.require(:audit_type).permit(:name, :total_score, :id,
risk_scoring_attributes: [:low, :medium, :high, :zero_tolerance, :_destroy, :id],
audit_ratings_attributes: [ :id, :from, :to, :description, :_destroy])
查看
<%= nested_form_for(@audit_type, method: :patch) do |f| %>
<div class="table-responsive">
<table class="table table-search table-striped table-responsive" id="condensedTable">
<thead>
<tr>
<th>From</th>
<th>To</th>
<th>Result</th>
<th>Actions</th>
</tr>
</thead>
<tbody id='audit_rating_data'>
<%= f.fields_for :audit_ratings, @audit_type.audit_ratings, :wrapper => false do |builder| %>
<tr class="<%= cycle("odd", "even") -%> number-cell fields">
<td class="v-align-middle semi-bold">
<%= builder.number_field :from, placeholder: "#", class: 'from_field', required: true %>
</td>
<td class="v-align-middle">
<%= builder.number_field :to, placeholder: "#", class: 'to_field', required: true %>
</td>
<td class="v-align-middle semi-bold">
<%= builder.text_area :description, class: "text-uppercase", required: true %>
</td>
<td class="v-align-middle">
<%= builder.link_to_remove "<i class='fa fa-trash-o'></i>".html_safe, class: "btn btn-rounded btn-danger" %>
</td>
</tr>
<% end %>
</tbody>
</table>
<%= f.link_to_add "<i class='fa fa-plus'></i>".html_safe, :audit_ratings, class: "btn btn-rounded btn-primary", :data => { :target => "#audit_rating_data" } %>
</div>
<% end %>
和模型有关系
has_many :audit_ratings
accepts_nested_attributes_for :audit_ratings, allow_destroy: true
在更新时,如果我删除任何关联的记录,它会将参数传递为
"audit_ratings_attributes"=>{"0"=>{"from"=>"10", "to"=>"20", "description"=>"test", "_destroy"=>"false"}, "1"=>{"from"=>"10", "to"=>"20", "description"=>"test", "_destroy"=>"1"} }
我观察到的是它在更新时缺少 id 属性,实际上它是嵌套表单的隐藏字段。所以它创建新记录而不是删除。
提前致谢
【问题讨论】:
-
你能从控制器发布你的强大参数吗?
-
更新代码,验证一次
-
您将
id发送到控制器哪里?正如您在问题中提到的那样,您认为没有hidden_field。 -
添加完整的表单代码,或者您可以在构建器
fields_for部分添加一个隐藏字段,如下所示:<%= builder.hidden_field :id, builder.id %> -
我正在使用 has_one 也嵌套了它正在呈现 id 的相同表单,_destroy 通过nested_form gem 的字段但它没有发生在 has_many 关系中
标签: ruby-on-rails ruby-on-rails-4 parameter-passing nested-forms fields-for