Я делаю простое приложение для распределения команд. У меня три модели - игроки, команды и раунды. Идея состоит в том, чтобы иметь список игроков, из которых пользователь может выбрать тех, кто на самом деле присутствует в день, чтобы играть в раунд. Пока у меня есть код, который принимает всех текущих игроков в db и случайным образом распределяет их в команде (команды создаются при создании раунда).Как принять атрибуты для моделей, не имеющих активной ассоциации записей?
class Player < ActiveRecord::Base
has_and_belongs_to_many :teams
end
class Team < ActiveRecord::Base
has_and_belongs_to_many :players
belongs_to :round
end
class Round < ActiveRecord::Base
has_many :teams
end
Я написал функцию, которая вызывается во время раунда, чтобы создавать и заполнять команды. Это нормально работает, но он просто получает входной список игроков от Player.all
.
То, что я хотел бы в раундов/new.html.erb иметь что-то вроде этого:
<%= f.fields_for(@players) do |player| %>
<%= check_box_tag 'player_ids[]', player.id, true %>
<%= player.first_name %> <%= player.surname %>
<% end %>
Таким образом, на submit
я могу обработать массив выбранных пользователей для этого раунда и только назначить эти игроки в команду. Я думал об использовании
accepts_nested_attributes_for :players
в модели раундов, но это на самом деле не имеет (или необходимости) ассоциацию с игроками. Есть ли способ добиться этого или чего-то подобного? Должен ли я вместо этого настроить действие в контроллере игроков, который управляет просмотром/отправкой флажка, а затем сохраняет выбор пользователя в данных сеанса?
создать 'Player.all_selected (params [: player_ids])' - что-то в этом роде. – iced
Хей, вы можете сделать это очень просто с http://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-collection_check_boxes, для этого вам даже не требуется accepts_nested_attributes_for. Замените поля fields_for с помощью: '<% = f.collection_check_boxes: player_ids, Player.all,: id,: first_name%>' и обновите принятые параметры, чтобы включить 'player_ids: []' – cristian
Можете ли вы объяснить использование 'player_ids 'как первый аргумент? Я пробовал то, что вы предложили @cristian, но я получаю ошибку 'undefined method 'player_ids''. Я также не уверен, как включить player_ids: array в params. Было бы просто 'def round_params params.require (: round) .permit (: name,: player_ids) end' – moleman