0

私は、プレーヤーと備品の間に多対多の関係を持たせようとしています。そのため、プレーヤーがフィクスチャでプレーすると、そのプレーヤーがどのフィクスチャでプレーしたか、誰がフィクスチャでプレーしたかを確認できます。

ブール値の「sub_paid」列を使用して、プレーヤーがゲームの代金を支払ったかどうかを追跡しようとしています。これをtrueまたはfalseに設定するのに苦労しています。選手/フィクスチャ レコードを作成できますが、sub_paid 属性がありません。

モデル

class Fixture < ActiveRecord::Base
has_many :player_fixtures
has_many :players, :through => :player_fixtures

class Player < ActiveRecord::Base
has_many :player_fixtures
has_many :fixtures, :through => :player_fixtures

class PlayerFixture < ActiveRecord::Base
belongs_to :player
belongs_to :fixture

移行

class CreatePlayerFixtures < ActiveRecord::Migration
 def change
  create_table :player_fixtures do |t|
   t.integer  "player_id"
   t.integer  "fixture_id"
   t.boolean  "sub_paid"

   t.timestamps
end

コントローラ

player_fixture に固有のものがないため、ここに何を配置すればよいかわかりません

意見

私は現時点でこれを持っています。

<%=form_for(@fixtures, :url => {:action =>'create'}) do |f| %>

質問

誰かが私を正しい方向に向けることができますか!

現時点で私が本当に立ち往生している私の大きな質問。

  1. フォームが最初に送信されたときにこれを sub_paid = false でデータベースに保存すると、後でこれを true に変更できます。
  2. フィクスチャ ビューで sub_paid = false ですべてのプレーヤーを並べ替えることができるようになりました。私のプレーヤーリストのEGは、それらを並べ替えて、falseのみを表示します。
  3. ここで、フォームとチェックボックスについてまだ回答されていない別の質問があります。HABTMフォームがレールで複数の値を送信しない

私はこれがたくさんあることを理解していますが、これは私が行っているプロジェクトのためであり、現在3週間すべてを試している画面を見てきました. 私はこれを成し遂げる必要があります。

4

1 に答える 1

0

以下をフォームに追加してみてください。

<%= check_box_tag :sub_paid %>
<%= select_tag :player_id, options_for_select(Player.all.map{|p| [p.name, p.id] %>

これらは通常のcheck_box_tagandであり、 orselect_tagではないことに注意してください。これらのパラメーターをパラメーターに含めたくありません。これで、アクションは次のようになります。f.check_boxf.select:fixturecreateFixtureController

def create
  @fixture = Fixture.new(params[:fixture])
  if @fixture.save
    @player = Player.find(params[:player_id])
    @fixture.player_fixtures << PlayerFixture.new(:sub_paid => params[:sub_paid], :player => @player)
    # other stuff, redirect, etc.
  else
    # error handling, render, etc.
  end
end

PlayerFixtureおそらく、保存部分がうまくいくことを確認するためにいくつかのチェックを行う必要がありますが、アイデアはわかります。それが役立つか、少なくともいくつかのアイデアを提供してくれることを願っています。

于 2012-04-08T22:40:14.370 に答える