2012-05-10 10 views
5

Teniendo en cuenta lo siguiente:anidada atributos no aparecer en forma sencilla

Modelos

class Location < ActiveRecord::Base 
    has_many :games 
end 

class Game < ActiveRecord::Base 
    validates_presence_of :sport_type 

    has_one :location 
    accepts_nested_attributes_for :location 
end 

controlador

def new 
    @game = Game.new 
    end 

Ver (forma)

<%= simple_form_for @game do |f| %> 
    <%= f.input :sport_type %> 
    <%= f.input :description %> 
    <%= f.simple_fields_for :location do |location_form| %> 
    <%= location_form.input :city %> 
    <% end %> 
    <%= f.button :submit %> 
<% end %> 

Por qué el campo de ubicaciones (ciudad) no aparecen en el ¿formar? No estoy recibiendo ningún error. ¿Qué me estoy perdiendo?

Respuesta

5

Ok No estoy seguro si está buscando elegir una ubicación existente para asociarla con la fama o si desea crear una nueva ubicación para cada juego.

Suponiendo que sea el primer escenario:

Cambia la asociación en el modelo de juego de modo que un juego pertenece a una ubicación.

class Game < ActiveRecord::Base 
    validates_presence_of :sport_type 

    belongs_to :location 
    accepts_nested_attributes_for :location 
end 

Es posible que deba agregar un campo location_id a su modelo de juego a través de una migración.

Luego, en lugar de una forma anidada, solo va a cambiar el campo Ubicación en el modelo del juego.

Si es el segundo escenario y desea construir una nueva ubicación para cada juego, entonces tendrá que cambiar sus modelos de la siguiente manera:

class Location < ActiveRecord::Base 
    belongs_to :game 
end 

class Game < ActiveRecord::Base 
    validates_presence_of :sport_type 

    has_one :location 
    accepts_nested_attributes_for :location 
end 

Usted tendrá que añadir un campo game_id a la ubicación modelo si aún no tiene uno.

Luego, en el controlador que se necesita para construir un lugar con el fin de obtener los campos del formulario anidados para poder apreciar:

def new 
@game = Game.new 
@location = @game.build_location 
end 
+0

Si hago eso, me sale: atributo desconocido: game_id –

+0

Identificación, calle, ciudad , state, zip_code, country –

+0

ver la respuesta revisada anterior – julesie

Cuestiones relacionadas