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 フィールドを変更します。

これが 2 番目のシナリオで、ゲームごとに新しい場所を構築したい場合は、次のようにモデルを変更する必要があります。

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 に答える