0

我试图在球员和固定装置之间建立多对多的关系。因此,当一名球员参加过比赛时,我可以看到球员参加过哪些比赛以及谁参加过比赛。

然后,我尝试使用带有布尔值的“sub_paid”列来跟踪玩家是否已为游戏付费。我很难将其设置为真或假。我可以创建玩家/灯具记录,但没有 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 表格未在 rails 中提交多个值

我知道这很多,但这是针对我正在做的一个项目,并且已经在屏幕上尝试了 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_tagandselect_tag而不是f.check_boxor f.select。我们不希望这些参数出现在您的:fixture参数中。现在create你的动作FixtureController应该是这样的:

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 回答