问题描述
背景:我正在使用simple_form在Rails中呈现关联的嵌套属性。我已经使用simple_fields_for在嵌套关联的编辑表单上应用了jquery-datatables gem。
我的模特是:
has_many :foos,dependent: :destroy
accepts_nested_attributes_for :foos,reject_if: :all_blank,allow_destroy: true
我的看法是:
edit.html.slim
table.table.table-bordered#foo-requirements-table
thead
tr
th Name
th Age
tbody.foo-row
= form.simple_fields_for :foos do |f|
= render("foo_fields",f: f)
_foo_fields.html.slim
tr class="#{foo_colour(f.object)} nested-fields"
td
= f.input :name,label: false,required: true
td
= f.select :age,Foo.foos.map {|p,_v| [p.upcase,p] },{},class: "form-control foo-colour"
td
= link_to_remove_association fa_icon("trash"),f,class: "btn btn-danger bottom-margin",data: {confirm: "Are you sure that you want to remove the row #{f.object&.age}?"}
控制器
def edit
@bar= Bar.find_by(id: params[:id])
build_foos if @bar.foos.empty?
end
def build_foos
["a","b","c"].each do |action|
@bar.foos.build(name: action)
end
end
JavaScript
$("#foo-requirements-table").DataTable({
paging: false,});
问题:通过以上操作,嵌套关联中的id字段从参数中消失了。如果没有应用数据表,它将重新出现。这会导致Rails创建新字段,而不是在启用了数据表的情况下更新现有字段。
没有数据表的参数
<ActionController::Parameters {"0"=>{"name"=>"a","age"=> 22,"_destroy"=> false,"id" => 12}}....>
具有数据表的参数(不存在id字段)
<ActionController::Parameters {"0"=>{"name"=>"a","_destroy"=> false}}....>
注意:我允许嵌套关联的params中的所有属性,因此这与params allow无关。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)