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

为什么位置字段(城市)没有显示在表单中?我没有收到任何错误。我错过了什么?

4

1 回答 1

5

好的,我不确定您是否希望选择一个现有位置与名声相关联,或者您是否希望为每个游戏创建一个新位置。

假设这是第一种情况:

更改 Game 模型中的关联,使游戏属于某个位置。

class Game < ActiveRecord::Base
  validates_presence_of :sport_type

  belongs_to :location
  accepts_nested_attributes_for :location
end

您可能需要通过迁移将 location_id 字段添加到您的游戏模型中。

然后,您只需更改 Game 模型本身的 Location 字段,而不是嵌套表单。

如果是第二种情况,并且您希望为每个游戏建立一个新位置,那么您需要按如下方式更改模型:

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
于 2012-05-10T08:39:54.683 回答