Has_many:通过关系问题。提交表格

时间:2012-04-08 21:50:17

标签: ruby-on-rails ruby ruby-on-rails-3

我想在球员和赛程之间建立多对多的关系。因此,当一名球员参加比赛时,我可以看到球员所参加的比赛以及谁曾参加比赛。

我正在尝试跟踪玩家是否已使用" 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对它们进行排序,因此它只显示错误
  3. 我还有另一个问题,关于表单和复选框仍然没有答案。 HABTM Form not submitting more than one value in rails
  4. 我知道这很多,但这是我正在做的一个项目,并且一直在看一个屏幕,现在尝试所有的东西3周。我需要完成这件事。

1 个答案:

答案 0 :(得分:0)

尝试在表单中添加以下内容:

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

请注意,这些是普通的check_box_tagselect_tag,而不是f.check_boxf.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保存部分顺利进行,但您明白了。希望有助于或至少为您提供一些想法。