dr.*_*dr. 6 ruby-on-rails nested-forms
我正在使用Rails 2.3.2,并试图让嵌套的对象表单正常工作.我已经将我的问题缩小到Rails未设置我的嵌套表单元素以及启动accepts_nested_attributes_for处理所需的*_attributes的问题.
我的型号代码是:
class Person < Party
has_one :name, :class_name => "PersonName"
accepts_nested_attributes_for :name, :allow_destroy => true
end
class PersonName < ActiveRecord::Base
belongs_to :person
end
Run Code Online (Sandbox Code Playgroud)
我的视图代码看起来像这样(我正在使用HAML):
%h3 New customer
= error_messages_for :person, :person_name, :name, :country
- form_for :person, :url => collection_url, :html => {:class => 'MainForm'} do |person_form|
- @person.build_name unless @person.name
- person_form.fields_for :name do |name_form|
= name_form.label :given_name, "First Name:"
= name_form.text_field :given_name
= name_form.label :family_name, "Last Name:"
= name_form.text_field :family_name
= hidden_field_tag :inviter_id, params[:inviter_id]
= hidden_field_tag :inviter_code, params[:inviter_code]
%p= submit_tag "Create"
= link_to 'Back', collection_url
Run Code Online (Sandbox Code Playgroud)
而不是参数:
{"person"=>{"name_attributes"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
Run Code Online (Sandbox Code Playgroud)
我明白了:
{"person"=>{"name"=>{"given_name"=>"Fred", "family_name"=>"Flintstone"}}, ...}
Run Code Online (Sandbox Code Playgroud)
结果,我得到了一个TypeMismatch异常.我遵循了Ryan Daigle的文档.我也遵循了这篇博客的建议和复杂形式的例子.
使用Firebug,我浏览了我的表单,并将输入标记的name属性从name调整为name_attributes.这产生了带有name_attributes的参数,并且创建工作正常.
我陷入困境,因为我无法弄清楚为什么我的表单没有生成名称的*_attributes形式.
我尝试的另一件事是我在我的环境中使用complex_form_example.我已经浏览了控制器,模型和视图的每一寸,并将其与我的代码进行了比较.我找不到有什么不同.我知道这是小事,并希望得到任何帮助!
谢谢!
回发未路由到正确的位置
def new
@person = Person.new
end
<% form_for @person do |f| %>
<% f.fields_for :name_attributes do |p| %>
...
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
回发被路由到正确的位置
def new
@person = Person.new
@person.name = PersonName.new # << this allows fields_for :relation vs :relation_attributes
end
<% form_for @person do |f| %>
<% f.fields_for :name do |p| %>
...
<% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
无需在 #create 中再次@person.name
| 归档时间: |
|
| 查看次数: |
6071 次 |
| 最近记录: |