2011-07-29 10 views
5

que tienen una estructura anidada modelo que se parece a esto:¡La forma anidada no se muestra!

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

Estoy tratando de obtener la página accounts#new para mostrar tanto las formas, pero por alguna razón, sólo se muestra el formulario de cuentas (screenshot).

Aquí está el 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 %> 

EDIT: El código funciona ahora!

Respuesta

7

¿Por qué estás haciendo fields_for ".."?

Lo que quiere hacer es <%= f.fields_for :characters %>, que se repetirá en todos los caracteres y representará los campos como se requiere en el formulario de cuenta. Al llamar al fields_for en el objeto f, le indica al formulario principal que contiene atributos anidados.

En segundo lugar, tendrá que usar el objeto @account en su formulario en lugar de construir otro con @user.accounts.build. Al hacerlo de esta manera incorrecta, en realidad está creando un nuevo objeto de cuenta que no tendría ningún objeto de caracteres preconstruido para él.

Además de esto, deberá especificar accepts_nested_attributes_for :characters en su modelo Account para que el formulario los acepte junto con los parámetros de la cuenta.

+0

¡Gracias por responder! Modifiqué el código pero todavía no funciona:/He editado mi pregunta para actualizar el código también. ¿Puedes echar un vistazo qué más podría faltar? – imjp

+0

@imjp: Si aclaró qué es "todavía no funciona", entonces tal vez sí. –

+0

@imjp: Realmente noté que cometiste un error en tu formulario. El párrafo medio en mi respuesta corrige ese error. –

Cuestiones relacionadas