2
我有以下模型設置。我有比賽和比賽。匹配has_many:遊戲,Match match_nested_attributes_for:遊戲。 :games_attributes是所有成員attr_accessible。我的問題是,fields_for沒有生成正確的表單,所以Match不接受遊戲的嵌套屬性。這裏是我的表單代碼:當屬性通過has_many關聯時,你如何接受一個嵌套屬性?
<%= 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的名稱不正確。名稱匹配[遊戲] [winner_id],但名稱應該匹配[games_attributes] [0] [winner_id]。我怎麼解決這個問題?
這不是一個答案,但我懷疑這個問題是因爲你正在處理其他嵌套資源中的嵌套資源。我明白了爲什麼'tournaments /:id/matches /:id/games'是有道理的,但我懷疑你會遇到一些麻煩,讓表單生成器進行合作。我說,因爲我沒有看到你的代碼有什麼問題,但你說得對,生成的輸出是不正確的。 – Andrew
我不這麼認爲。我認爲這個問題是由於將單一資源傳遞給f.fields_for。如果我用'f.fields_for:games'替換'f.fields_for match.games.last',我會得到正確的輸出結果。 – Max
好吧,我解決了這個問題。這很奇怪,我不知道爲什麼這會起作用,但我用f.fields_for:games,:last'替換了'f.fields_for match.games.last'。 – Max