Ruby on rails 嵌套表单未显示!
我有一个嵌套的模型结构,如下所示:Ruby on rails 嵌套表单未显示!,ruby-on-rails,ruby,nested-forms,Ruby On Rails,Ruby,Nested Forms,我有一个嵌套的模型结构,如下所示: resources :users, :path => '/' do resources :accounts do resources :characters end end 我试图让accounts#new页面显示这两个表单,但由于某些原因,仅显示accounts表单() 这是git: account.rb class Account < ActiveRecord::Base attr_accessible :a
resources :users, :path => '/' do
resources :accounts do
resources :characters
end
end
我试图让accounts#new
页面显示这两个表单,但由于某些原因,仅显示accounts表单()
这是git:
account.rb
class Account < ActiveRecord::Base
attr_accessible :account_name, :realm
accepts_nested_attributes_for :characters
belongs_to :user
has_many :characters, :dependent => :destroy
validates :account_name, :presence => 'true',
:length => { :in => 4..20 },
:uniqueness => 'true'
validates_presence_of :realm
validates_format_of :account_name, :with => /^[A-Za-z\d_]+$/
end
def new
@user = User.find(params[:user_id])
@account = Account.new
@account.characters.build
end
<%= form_for([@user, @account]) do |f| %>
<div class="field">
<%= f.label :account_name %><br />
<%= f.text_field :account_name %>
</div>
<div class="field">
<%= f.radio_button(:realm, "USWest") %>
<%= f.label(:realm, "USWest") %>
<%= f.radio_button(:realm, "USEast") %>
<%= f.label(:realm, "USEast") %>
<%= f.radio_button(:realm, "Europe") %>
<%= f.label(:realm, "Europe") %>
<%= f.radio_button(:realm, "Asia") %>
<%= f.label(:realm, "Asia") %>
</div>
<%= f.fields_for :character do |character_form| %>
<div class="field">
Name: <%= character_form.text_field :name %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
\u form.html.erb
class Account < ActiveRecord::Base
attr_accessible :account_name, :realm
accepts_nested_attributes_for :characters
belongs_to :user
has_many :characters, :dependent => :destroy
validates :account_name, :presence => 'true',
:length => { :in => 4..20 },
:uniqueness => 'true'
validates_presence_of :realm
validates_format_of :account_name, :with => /^[A-Za-z\d_]+$/
end
def new
@user = User.find(params[:user_id])
@account = Account.new
@account.characters.build
end
<%= form_for([@user, @account]) do |f| %>
<div class="field">
<%= f.label :account_name %><br />
<%= f.text_field :account_name %>
</div>
<div class="field">
<%= f.radio_button(:realm, "USWest") %>
<%= f.label(:realm, "USWest") %>
<%= f.radio_button(:realm, "USEast") %>
<%= f.label(:realm, "USEast") %>
<%= f.radio_button(:realm, "Europe") %>
<%= f.label(:realm, "Europe") %>
<%= f.radio_button(:realm, "Asia") %>
<%= f.label(:realm, "Asia") %>
</div>
<%= f.fields_for :character do |character_form| %>
<div class="field">
Name: <%= character_form.text_field :name %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
姓名:
编辑:代码现在可以工作了 您为什么要为“.”创建
字段
您要做的是
,因为这将遍历所有字符,并按照帐户表单中的要求呈现字段。通过调用f
对象上的fields\u,可以告诉父窗体它包含嵌套属性
其次,您需要在表单中使用@account
对象,而不是使用@user.accounts.build
构建另一个对象。通过这种错误的方式,实际上您正在创建一个新的account对象,而该对象不会预构建任何角色对象
除此之外,您还需要在帐户
模型中为字符
指定接受\u嵌套的\u属性,\u以便表单接受它们以及帐户参数。嘿,谢谢您的回答!我修改了代码,但仍然不起作用:/I我已经编辑了我的问题以更新代码。你能看看还有什么遗漏吗?@imjp:如果你澄清了什么“仍然不起作用”,那么可能是的。@imjp:事实上,我注意到你在表格中犯了一个错误。我回答的中间段修正了这个错误。如果修正了这个问题!我应该把老兄,那