编辑嵌套属性
Edit nested attributes
我在编辑嵌套模型时遇到问题。当我执行下面的代码时,这会在我的 WeeklySchedule table 中创建另一个条目。
示例:我想在星期一将 9 替换为 10。
每周时间表 table:
编辑前:
weekly_schedule_id: 1 monday: 9
编辑后:
weekly_schedule_id: 1 monday: 9
weekly_schedule_id: 2 monday: 10
代码:
型号:
class Installation < ActiveRecord::Base
accepts_nested_attributes_for :weekly_schedule
belongs_to :weekly_schedule
end
class WeeklySchedule < ActiveRecord::Base
has_one :installation
end
表格:
<%= simple_form_for @installation, class: 'form-horizontal' do |f| %>
<%= f.simple_fields_for :weekly_schedule do |w| %>
<%= w.time_field :monday %>
<% end %>
<% end %>
控制器:
def update
@installation.update(installation_params)
(...)
end
def edit
@installation = current_user.installations.find_by(:installation_id => params[:id])
end
installation_params:
{"x"=>"20",
"y"=>"21",
"weekly_schedule_attributes"=>{"monday"=>"10"}}
我做错了什么?
当您在嵌套模型的强参数中缺少 :id
时,就会发生这种情况。确保您的 installation_params
包括 :id
,如下所示:
def installation_params
params.require(:installation).permit(..., :weekly_schedule_attributes => [:id, :monday, ...])
end
我在编辑嵌套模型时遇到问题。当我执行下面的代码时,这会在我的 WeeklySchedule table 中创建另一个条目。
示例:我想在星期一将 9 替换为 10。
每周时间表 table:
编辑前:
weekly_schedule_id: 1 monday: 9
编辑后:
weekly_schedule_id: 1 monday: 9
weekly_schedule_id: 2 monday: 10
代码:
型号:
class Installation < ActiveRecord::Base
accepts_nested_attributes_for :weekly_schedule
belongs_to :weekly_schedule
end
class WeeklySchedule < ActiveRecord::Base
has_one :installation
end
表格:
<%= simple_form_for @installation, class: 'form-horizontal' do |f| %>
<%= f.simple_fields_for :weekly_schedule do |w| %>
<%= w.time_field :monday %>
<% end %>
<% end %>
控制器:
def update
@installation.update(installation_params)
(...)
end
def edit
@installation = current_user.installations.find_by(:installation_id => params[:id])
end
installation_params:
{"x"=>"20",
"y"=>"21",
"weekly_schedule_attributes"=>{"monday"=>"10"}}
我做错了什么?
当您在嵌套模型的强参数中缺少 :id
时,就会发生这种情况。确保您的 installation_params
包括 :id
,如下所示:
def installation_params
params.require(:installation).permit(..., :weekly_schedule_attributes => [:id, :monday, ...])
end