accepts_nested_attributes_for与has_many一起使用时仅显示一条记录

时间:2018-08-26 19:52:12

标签: ruby-on-rails-5 nested-forms

我的模特

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的轨道上

2 个答案:

答案 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可以更好地理解。