2

次のモデル設定があります。私はマッチとゲームを持っています。has_many:gamesに一致し、:gamesにaccepts_nested_attributes_forを一致させます。:games_attributesは、すべてのメンバーがattr_accessibleです。私の問題は、fields_forが正しいフォームを生成していないため、Matchがゲームのネストされた属性を受け入れていないことです。これが私のフォームコードです:

<%= form_for [@tournament, match], url: tournament_match_path(@tournament, match) do |f| %>
  <%= f.fields_for match.games.last do |builder| %>
    <%= builder.hidden_field :winner_id, value: 1 %>
  <% end %>
  <%= f.submit "Win Game", class: "actionButton activeAction" %>
<% end %>

これによって生成されるコードは次のとおりです。

<form id="edit_match_1" class="edit_match" method="post" action="/tournaments/1/matches/1" accept-charset="UTF-8">
  <div style="margin:0;padding:0;display:inline"> <!-- rails stuff here --></div>
  <input id="match_game_winner_id" type="hidden" value="1" name="match[game][winner_id]">
  <input class="actionButton activeAction" type="submit" value="Win Game" name="commit">
</form>

ご覧のとおり、match_game_winner_idの名前が正しくありません。名前はmatch[game][winner_id]ですが、名前はmatch [games_attributes][0][winner_id]である必要があります。どうすればこの問題を解決できますか?

4

1 に答える 1

1

私は自分でこの質問を解決することになりました。同じような状況で他の人を助けるために私の発見を共有したいと思います。Andrewがコメントで述べたように、fields_forはシンボルを期待しているので、最後のゲームを取得するには、最後のゲームを取得するメソッドに対応するシンボルのリストを渡す必要があります。私のフォームは次のようになりました。

<%= form_for [@tournament, match], url: tournament_match_path(@tournament, match) do |f| %>
  <%= f.fields_for :games, :last do |builder| %>
    <%= builder.hidden_field :winner_id, value: 1 %>
  <% end %>
  <%= f.submit "Win Game", class: "actionButton activeAction" %>
<% end %>
于 2012-04-29T22:22:51.677 に答える