当嵌套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?