form_for нескольких экземпляров глубоких вложенных маршрутов

Я собираю способ для команд участвовать в спортивных турнирах. При входе в команду пользователь также должен зарегистрировать всех игроков этой команды. Мои ассоциации и маршруты настроены следующим образом:

class Tournament < ApplicationRecord
  has_many :teams
  has_many :players, :through => :teams

  accepts_nested_attributes_for :teams  
end
class Team < ApplicationRecord
  belongs_to :tournament
  has_many :players

  accepts_nested_attributes_for :players
end
class Player < ApplicationRecord
  belongs_to :team
  has_one :tournament, :through => :team
end

(Routes.rb)

resources :tournaments do
    resources :teams, :only => [:new, :create] do
      resources :players, :only => [:new, :create]
    end
end

То, что я хотел бы иметь, это одна форма с несколькими входами игрока, которые все сохраняются одним щелчком мыши. Мой текущий контроллер & new.html.erb выглядит следующим образом:

(Players_controller.rb)

class PlayersController < ApplicationController
    def create
        @tournament = Tournament.find_by_id params[:tournament_id]
        @team = Team.find_by_id params[:team_id]
        @player = @team.players.new(player_params)
        if @player.save
          redirect_to root_path #just return home for now
        else
          redirect_to new_tournament_team_path(@tournament)
        end     
    end

    def new
        @tournament = Tournament.find_by_id params[:tournament_id]
        @team = Team.find_by_id params[:team_id]
        @player = []
        3.times do
          @player << @team.players.new
        end
    end

    private

  def player_params
    params.require(:player).permit(:name, :tournament_id, :team_id)
  end
end

(Игроки /new.html.erb)

<%= form_for [@tournament, @team, @player] do |f| %>
    <% hidden_field_tag :tournament_id, @tournament.id %>
    <% hidden_field_tag :team_id, @team.id %>
    <% 3.times do %>
    <p>
        <%= f.label :name, "Name: " %>
        <%= f.text_field :name %>
    </p>
    <% end %>
    <%= submit_tag 'Submit', :class => 'rounded_btn' %>
</p>
<% end %>

Насколько я понимаю, я должен пытаться создать массив "игроков", который будет содержать имена 3 игроков, которые вводятся в форме. Этот массив затем сохраняется с помощью действия создания. Это правильный путь, и что может потребоваться изменить в моем коде, чтобы я выбрал правильный путь?

Благодарю.

ФИКСИРОВАННЫЙ
Применение методов в учебнике Райана Бэйта "Вложенная модель"
Также удалена валидация для "own_to" в Rails 5.0

1 ответ

Решение

ФИКСИРОВАННЫЙ
Применение методов в учебнике Райана Бэйта "Вложенная модель"
Также удалена валидация для "own_to" в Rails 5.0

Другие вопросы по тегам