我正在寻找以下内容:所有用户的数组(在这种情况下只有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
答案 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_tag
。 input
属性name
是参数。
您的控制器中似乎也有很多逻辑。记住要保持模型中的逻辑,并且只使用控制器为视图提供正确的对象,并将它们用于保存。俗话说“脂肪模型,瘦骨调的控制器”。