嵌套表格没有出现!

时间:2011-07-29 04:34:01

标签: ruby-on-rails ruby nested-forms

我有一个嵌套的模型结构,如下所示:

resources :users, :path => '/' do
    resources :accounts do
        resources :characters
    end
end

我正在尝试让accounts#new页面显示两个表单但由于某种原因只显示了帐户表单(screenshot)。

这是git:https://github.com/imjp/d2shed

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



accounts_controller.rb

def new 
    @user = User.find(params[:user_id])
    @account = Account.new
    @account.characters.build
end



_form.html.erb

<%= 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 %>

编辑:代码现在正常运作!

1 个答案:

答案 0 :(得分:7)

你为什么要做fields_for ".."

您要做的是<%= f.fields_for :characters %>,因为它将遍历所有字符并根据帐户表单中的要求呈现字段。通过调用fields_for对象上的f,您告诉父表单它包含嵌套属性。

其次,您需要在表单中使用@account对象,而不是使用@user.accounts.build构建另一个对象。通过这种错误的方式,您实际上创建了一个新的帐户对象,该对象不会为其预先构建任何字符对象。

除此之外,您还需要在accepts_nested_attributes_for :characters模型中指定Account,以便表单接受它们以及帐户参数。