2012-05-10 81 views
5

考慮以下幾點:嵌套屬性沒有出現在簡單的形式

模型

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 

控制器

def new 
    @game = Game.new 
    end 

視圖(形式)

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

爲什麼地點領域(市)沒有出現在形成?我沒有收到任何錯誤。我錯過了什麼?

回答

5

好吧我不確定你是否想選擇一個現有的位置與名聲相關聯,或者如果你想爲每個遊戲創建一個新的位置。

假設它是第一種方案:

變化博弈模型的關聯,使得一個遊戲屬於一個位置。

class Game < ActiveRecord::Base 
    validates_presence_of :sport_type 

    belongs_to :location 
    accepts_nested_attributes_for :location 
end 

您可能需要通過遷移爲您的遊戲模型添加一個location_id字段。

然後,而不是一個嵌套的形式,你只是要改變遊戲模型本身的位置字段。

如果是第二種情況下,你要建立一個新的位置,每場比賽,那麼你將需要改變你的模型如下:

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 

您將需要一個game_id字段添加到位置模型,如果你還沒有。

然後在你的控制器,你需要爲了得到嵌套表格字段顯示建一個位置:

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

如果我這樣做,我得到:未知屬性:game_id –

+0

ID,街道,城市,狀態,zip_code,國家 –

+0

查看上面修改後的答案 – julesie