我的模特
class Game < ApplicationRecord
has_many :rounds
accepts_nested_attributes_for :rounds
end
class Round < ApplicationRecord
belongs_to :game
end
控制器
def new
@game = Game.new
3.times { @game.rounds.build }
end
视图
<%= form_with scope: :game, url: games_path, local: true do |form| %>
<p>
<%= form.label :title %><br>
<%= form.text_field :title %>
</p>
<p>
<%= form.label :game_date %><br>
<%= form.date_field :game_date %>
</p>
<ul>
<%= form.fields_for :rounds do |builder| %>
<li>
<%= builder.label :title %>
<%= builder.text_field :title %>
<%= builder.label :order %>
<%= builder.text_field :order %>
</li>
<% end %>
</ul>
<p>
<%= form.submit %>
</p>
<% end %>
上面的代码仅在new正在构建3条记录时才生成一个“回合”记录。
我处于5.2.1的轨道上
答案 0 :(得分:0)
原来,您必须使用form_for而不是新的form_with。
答案 1 :(得分:0)
这是因为使用表单时您具有不同的对象(formbuilder)。
<%= form_with model: @game, local: true do |form| %>
或
<%= form_with scope: @game, url: games_path, local: true do |form| %>
代替
<%= form_with scope: :game, url: games_path, local: true do |form| %>
产生期望的结果。看看this blog可以更好地理解。