Флажок в формах

Я ищу следующую вещь: массив всех пользователей (в данном случае только 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 это аргумент.

Вы также, кажется, имеете много логики в своих контроллерах. Не забывайте сохранять логику в моделях и использовать только контроллеры для предоставления нужных объектов вашим представлениям, например, для их сохранения. Как говорится, "толстая модель, тощий контроллер".

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