0

我正在寻找以下内容:所有用户的数组(在这种情况下只有 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 个文本字段,我可以在其中填写参与者 ID,以便在参与者表中记录(与游戏相关联)。

我现在已经四处寻找 1.5 小时,但我似乎无法找到正确的答案。我需要的是一种语法,它为我提供了所有当前用户(比如@users)的列表,并附有一个复选框。当我单击复选框时,它应该将其 ID 添加到参数中,并且我应该能够使用链接的参与者 ID 创建一个新游戏。但是,我遇到了一些附加到 check_box 的 ID 的问题,它似乎总是 1。我读过一些关于复选框对哈希来说很痛苦的东西,但我没有其他解决方案 atm。

我试过:

<% @users.each do |i| %>
        <%= check_box_tag "alternate_numbers[#{i}]" %> <%= i.name %><br />
<% end %>

但我看不出有什么办法可以修复表格本身的一部分。

GamesController 代码(编辑):

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

描述起来非常模糊,因为我不确定如何实现这一点。

简而言之:check_box 应该包含循环中 user_id 的值。我现在正在使用 text_field 助手填写手动 ID,但我希望将复选框链接到视图中旁边的用户名。

任何指南/解决方案/提示?

谢谢

4

1 回答 1

0

好的,所以你正在为一个新游戏制作一个表格。您现在必须将新游戏以及一些参与者提供给您的视图。

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就是论据。

您的控制器中似乎也有很多逻辑。请记住将逻辑保留在模型中,并且仅使用控制器将正确的对象提供给您的视图,并将它们用于保存,例如。俗话说,“胖模特,瘦控”。

于 2012-12-03T00:29:31.030 回答