2012-05-10 12 views
5

Biorąc pod uwagę następujące elementy:zagnieżdżony nie atrybuty wyświetlane w prostej formie

Models

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 

Controller

def new 
    @game = Game.new 
    end 

View (formularz)

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

Dlaczego pole lokalizacje (miasto) nie pojawiają się w Formularz? Nie dostaję żadnego błędu. czego mi brakuje?

Odpowiedz

5

OK Nie jestem pewien, czy szukasz wybranej lokalizacji do powiązania ze sławą, czy chcesz utworzyć nową lokalizację dla każdej gry.

Zakładając, że jest to pierwszy scenariusz:

Zmień stowarzyszenie w modelu gry tak, że gra należy do lokalizacji.

class Game < ActiveRecord::Base 
    validates_presence_of :sport_type 

    belongs_to :location 
    accepts_nested_attributes_for :location 
end 

Może być konieczne dodanie pola location_id do modelu gry podczas migracji.

Zamiast zamiast zagnieżdżonego formularza zmienisz tylko pole Lokalizacja w samym modelu gry.

Jeśli jest to drugi scenariusz i chcesz zbudować nową lokalizację dla każdej gry to trzeba będzie zmienić swoje modele w następujący sposób:

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 

Trzeba dodać pole game_id do lokalizacji model, jeśli jeszcze go nie masz.

Następnie w kontrolerze trzeba będzie zbudować lokalizację w celu uzyskania zagnieżdżone pola formularza, aby pokazać:

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

Jeśli to zrobię, mogę dostać: nieznany atrybut: game_id –

+0

id, ulica, miasto , stan, kod zip, kraj –

+0

zobacz poprawioną odpowiedź powyżej – julesie