加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails-4 – Rails 4 – 使用嵌套属性保存对象

发布时间:2020-12-17 03:48:05 所属栏目:百科 来源:网络整理
导读:我有一个父模型,它有一个具有嵌套属性的子模型.我有一个表单可以更新父级和子级. 这是我的模特: class Parent ActiveRecord::Base has_one :child accepts_nested_attributes_for :childendclass Child ActiveRecord::Base belongs_to :parentend 表格视图
我有一个父模型,它有一个具有嵌套属性的子模型.我有一个表单可以更新父级和子级.

这是我的模特:

class Parent < ActiveRecord::Base
  has_one :child
  accepts_nested_attributes_for :child
end

class Child < ActiveRecord::Base
  belongs_to :parent
end

表格视图:

<%= form_for @parent,do |f| %>
  <%= f.text_field :parent_name %>
  <%= f.fields_for @parent.child do |c| %>
    <%= c.text_field :child_name %>
  <% end %>
  <%= f.submit "Save" %>
<% end %>

家长控制器:

class ParentsController < ApplicationController      
  def update
    @parent = Parent.find(params[:id])    
    @parent.update(params.require(:parent).permit(:parent_name,child_attributes: [:child_name]))

    redirect_to @parent
  end
end

当我保存表单时,父级更新但子级没有.我究竟做错了什么?

解决方法

您的表单代码的嵌套部分有问题,应该是

<%= form_for @parent,do |f| %>
  <%= f.text_field :parent_name %>
  <%= f.fields_for :child do |c| %>  <<<<<<<<<<< this line was wrong
    <%= c.text_field :child_name %>
  <% end %>
  <%= f.submit "Save" %>
<% end %>

您还必须在params属性中传递id:

@parent.update(params.require(:parent).permit(:parent_name,child_attributes: [:id,:child_name]))

干杯

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读