Rails: вложенная форма не создает запись - PullRequest
2 голосов
/ 15 января 2020

Я пытаюсь создать форму для создания игры, в которой есть четыре разных игрока. Я построил вложенную форму, которая отображает четыре набора полей игрока в игровой форме. Однако, когда я отправляю форму, ничего не происходит. Я хотел бы, чтобы отправка формы вызывала действие #create моего контроллера, но оно даже не вызывает create (я пытаюсь вызвать ошибку в #create, но не могу).

Вот мой код:

game.rb

class Game < ApplicationRecord
  has_many :players, dependent: :destroy
  has_many :rounds, dependent: :destroy

  accepts_nested_attributes_for :players
end

player.rb

class Player < ApplicationRecord
  belongs_to :game
  has_many :rounds
  validates :name, presence: true, length: { maximum: 15 }


end

games_controller.rb

class GamesController < ApplicationController

  def create
    raise
    @new_game = Game.new(game_params)
    @new_game.start = Date.today
    @new_game.save!
    redirect_to root_url
  end

  def new
     @game = Game.new
     4.times { @game.players.build }
   end

   private
     def set_game
       @game = Game.find(params[:id])
     end

     def game_params
       params.require(:game).permit(:date, player_attributes: [:name])
     end
end

views / games / new.rb

<%= form_with model: @game do |f| %>
  Players:
  <ul>
    <%= f.fields_for :players do |players_form| %>
      <li>
        <%= players_form.label :name %>
        <%= players_form.text_field :name %>
      </li>
    <% end %>
  <%= f.submit "Submit"%>
  </ul>
<% end %>

rout.rb

Rails.application.routes.draw do
  root to: 'pages#home'
  resources :games, only: [:create, :new]
end

Вот журналы, когда я отправляю форму:

Started POST "/games" for ::1 at 2020-01-15 12:54:13 +0100
Processing by GamesController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"owiE4RViIsVonr9dwDAlLZR8MtZ/EnY/VTUq7o5zxHc2KcQ0Nliag9XnDHQZ7xKc5cIqOwQbuoPwSgkWPMknSA==", "game"=>{"players_attributes"=>{"0"=>{"name"=>"Bob"}, "1"=>{"name"=>"Joe"}, "2"=>{"name"=>"Alice"}, "3"=>{"name"=>"Fernand"}}}, "commit"=>"Submit"}
Completed 500 Internal Server Error in 7ms (ActiveRecord: 0.0ms)



RuntimeError ():

app/controllers/games_controller.rb:4:in `create'

Я впервые задаю вопрос по stackoverflow, поэтому, пожалуйста, дайте мне знать, если я не достаточно ясен / мне нужно дать больше информации.

Спасибо!

Ответы [ 2 ]

1 голос
/ 15 января 2020

Проблема player_attributes

Должно быть

def family_params
  params.require(:game).permit(:date, players_attributes: [:name])
end
0 голосов
/ 15 января 2020

На основании вашего журнала ваша форма отправляется как JS. Просто установите для local значение true, чтобы отключить это:

views/games/new.rb
<%= form_with model: @game, local: true do |f| %>

ссылка: form_with

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...