【问题标题】:accepts_nested_attributes_for only display one record when used with has_many与 has_many 一起使用时,accepts_nested_attributes_for 仅显示一条记录
【发布时间】:2018-08-26 19:52:11
【问题描述】:

我的模型

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 %>

上面的代码只在新建 3 条记录时生成“一轮”记录。

我在 Rails 5.2.1

【问题讨论】:

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


【解决方案1】:

这是因为你在使用表单时有一个不同的对象(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 以获得更好的理解。

【讨论】:

    【解决方案2】:

    事实证明,您必须使用 form_for 而不是新的 form_with。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多