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 }を持っています。これにより、テーブル参加者 (ゲームにリンクされている) に記録を作成するために、参加者 IDを入力できる 3 つのテキストフィールドが効果的に提供されます。 )。

私は今1.5時間探し回っていますが、適切な答えが見つからないようです。私が必要としているのは、現在のすべてのユーザー (@users など) のリストをチェックボックス付きで表示する構文です。チェックボックスをクリックすると、ID がパラメーターに追加され、リンクされた参加者 ID を使用して新しいゲームを作成できるはずです。しかし、常に 1 のように見える check_box に関連付けられた ID に問題が発生しています。

私は試した:

<% @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 に答える