当嵌套obj上的show / edit为null时,使用fields_for和accepts_nested_attributes_for

编辑:所以我可以输入表单并单击提交,并在show.html.erb我收到此错误:

undefined method 'address_line_one' for nil:NilClass

在这一行这里是否意味着没有mailing_address?

   

即使我在下面的fields_for获得了这些信息,并且应该将其保存在提交中…但我认为我强大的参数在下面确定是阻止了mailing_address被保存。 如果您查看我的模型,您可以看到mailing_address的使用方式(也是我控制器中的新操作)

原帖:

使用此博客来执行嵌套表单:

The Definitive Guide to accepts_nested_attributes_for a model in rails 3

它运作得很好,或者似乎也是如此。 新动作渲染得很好,我可以在单击提交时输入信息,表示已保存,并向我显示节目动作

但是节目中的@ group.mailing_address似乎不存在(这意味着点击这里的编辑也不会在field_for中显示任何内容)

我猜这与我的def group_params虽然不确定我做错了什么。

group show rb snippet:

 

Group tin:

Group Address:
,

团体模特:

 class Group < ActiveRecord::Base belongs_to :mailing_address, class_name: 'Address', foreign_key: 'mailing_address_id' accepts_nested_attributes_for :mailing_address end 

集团控制人:

  def show #@group = Group.find(params[:id]) end def new #is this right? @group=Group.new @group.build_mailing_address respond_to do |format| format.html # new.html.erb format.json { render json: ghouse } end end def create @group = Group.new(group_params) respond_to do |format| if @group.save format.html { redirect_to @group, notice: 'Group was successfully created.'} format.json { render :show, status: :created, location: @group } else format.hmtl { render :new } format.json { render json: @group.errors, status: :unprocessable_entity } end end end 

而真正重要的部分:

  # Never trust parameters from the scary internet, only allow the white list through. def group_params params.require(:group).permit(:group_name, :group_contact, :tin, :npi, :notes, :mailing_address) end 

为了完整性,带有fields_for的_form.html.erb片段

   










:mailingaddress应该是mailing_address_attributes: [address_line_one, address_line_two, ...etc]在你的group_params方法中。

http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html http://apidock.com/rails/ActionView/Helpers/FormHelper/fields_for

如果nil为编辑操作,您还需要添加build_mailing_address,以使fields_for在编辑时正确显示:

 @group.build_mailing_address if @group.mailing_address.nil?