Флажок в формах
Я ищу следующую вещь: массив всех пользователей (в данном случае только 6) с флажком перед их именем, что приводит к списку выбираемых игроков для игры.
Текущий код:
<%= form_for @game, url: games_path, :method => "post" do |f| %>
<%= f.label :name %>
<%= f.text_field :name, :value => "#{current_user.name}\'s Game" %>
<%= f.fields_for :participants do |ff| %>
<%= ff.label :user_id %>
<%= ff.text_field :user_id %>
<%= ff.check_box :user_id %>
<% end %>
<%= f.submit "Create Game", class: "btn btn-primary" %>
<% end %>
Теперь у меня в контроллере 3.times { @game.participants.build }, который фактически дает мне 3 текстовых поля, в которых я могу заполнить идентификатор участника, чтобы сделать запись в таблице участников (которая связана с играми).
Я искал 1,5 часа сейчас, и я не могу найти правильный ответ. Что мне нужно, это синтаксис, который дает мне список всех текущих пользователей (скажем, @users) с установленным флажком. Когда я нажимаю флажок, он должен добавить свой идентификатор к параметрам, и я смогу создать новую игру со связанными идентификаторами участников. Однако у меня возникают некоторые проблемы с идентификатором, прикрепленным к check_box, который всегда равен 1. Я читал кое-что о том, что флажки - это проблема с хешами, но у меня нет другого решения.
Я старался:
<% @users.each do |i| %>
<%= check_box_tag "alternate_numbers[#{i}]" %> <%= i.name %><br />
<% end %>
Но я не вижу способа исправить эту часть самой формы.
Код игрового контроллера (редактировать):
def new
@users = User.paginate(page: params[:page])
@games = current_user.games
@game = Game.new
3.times { @game.participants.build }
end
def create
@game = Game.new(params[:game])
@newround = @game.rounds.new
@newround.storyFragment = "New story!"
if @game.save && @newround.save
flash[:success] = "Created!"
redirect_to game_path(@game.id)
else
redirect_to root_url
end
end
Это очень расплывчато, потому что я не совсем уверен, как этого добиться.
Вкратце: флажок должен содержать значение user_id в цикле. Сейчас я заполняю ручной идентификатор с помощью помощника text_field, но я хотел бы, чтобы флажок был связан с именем пользователя, которое находится рядом с ним в представлении.
Какие-либо рекомендации / решения / советы?
Спасибо
1 ответ
Итак, вы создаете форму для новой игры. Теперь вы должны кормить эту новую игру вместе с некоторыми участниками на ваш взгляд.
def new
@game = Game.new
@participants = User.all # or the users you want
end
Теперь используйте те, на ваш взгляд. Вы были на правильном пути. В зависимости от того, как ваш create
действие работает:
<% @participants.each do |p| %>
<%= check_box_tag "participants[#{p.id}]" %> <%= p.name %>
<% end %>
Я думаю, что вам не хватало документацииcheck_box_tag
, input
атрибут name
это аргумент.
Вы также, кажется, имеете много логики в своих контроллерах. Не забывайте сохранять логику в моделях и использовать только контроллеры для предоставления нужных объектов вашим представлениям, например, для их сохранения. Как говорится, "толстая модель, тощий контроллер".