表格中的复选框标签

时间:2012-12-02 22:33:31

标签: ruby-on-rails ruby forms checkbox helpermethods

我正在寻找以下内容:所有用户的数组(在这种情况下只有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次{@ game.participants.build} ,它有效地为我提供了3个文本字段,我可以在其中填写参与者ID 为了在表格参与者(与游戏相关联)中创建记录。

我现在一直在寻找1.5小时,我似乎找不到合适的答案。我需要的是一种语法,它给我一个所有当前用户的列表(比如@users),并附上一个复选框。当我点击复选框时,它应该将其ID添加到参数中,我应该能够创建一个链接参与者ID的新游戏。但是我在check_box附带的ID上遇到了一些问题,看起来总是好像1.我已经读过一些关于复选框的问题,但是我没有其他解决方案。

我试过了:

<% @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,但是我希望将复选框链接到视图中紧邻它的用户名。

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

THX

1 个答案:

答案 0 :(得分: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 %>

我认为你缺少的是documentation for check_box_taginput属性name是参数。

您的控制器中似乎也有很多逻辑。记住要保持模型中的逻辑,并且只使用控制器为视图提供正确的对象,并将它们用于保存。俗话说“脂肪模型,瘦骨调的控制器”。