编辑:所以我可以输入表格并点击提交,在show.html.erb
我收到此错误:
undefined method 'address_line_one' for nil:NilClass
这一行是否意味着没有mailing_address?
<%= @group.mailing_address.address_line_one %>
即使我在下面的fields_for获得了这些信息,并且应该将其保存在提交中......但我认为我强大的参数下面会阻止mail_address被保存。如果您查看我的模型,您可以看到mailing_address的使用方式(也是我控制器中的新操作)
原帖:
使用此博客进行嵌套表单:
效果很好,或者似乎也是如此。新的动作渲染得很好,我可以输入信息,当我点击提交它说它已保存并显示我的节目动作
但是节目中的@ group.mailing_address似乎不存在(这意味着点击这里的编辑也不会在field_for中显示任何内容)
我猜这与我的def group_params
有关,但不确定我做错了什么。
group Show rb snippet:
<p>
<strong>Group tin:</strong>
<%= @group.tin %>
</p>
<p>
<strong>Group Address:</strong>
<%= @group.mailing_address.address_line_one %> <!-- dies here nil class -->
<%= @group.mailing_address.address_line_two %> <br />
<%= @group.mailing_address.city%>, <%= @group.mailing_address.state %> <%= @group.mailing_address.zip %>
</p>
小组模特:
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代码段<td>
<%= f.fields_for :mailing_address do |builder| %>
<div class="field">
<%= builder.label :address_line_one %><br />
<%= builder.text_field :address_line_one %><br >
<%= builder.label :address_line_two %><br />
<%= builder.text_field :address_line_two %><br />
<%= builder.label :city %><br />
<%= builder.text_field :city %> <br />
<%= builder.label :state %><br />
<%= builder.text_field :state %> <br />
<%= builder.label :zip %><br />
<%= builder.text_field :zip %> <br />
</div>
<% end -%>
</td>
答案 0 :(得分:1)
: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
如果你的编辑操作为零,你还需要添加一个build_mailing_address,以便在编辑时适当地显示fields_for:
@group.build_mailing_address if @group.mailing_address.nil?