如何使用has_many保存数据:通过

时间:2011-12-06 18:26:20

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

我在游戏和帐户模型之间有多对多的关系,如下所示:

class Account < ActiveRecord::Base
  has_many :account_games, :dependent => :destroy
  has_many :games, :through => :account_games
end

class Game < ActiveRecord::Base
  has_many :account_games, :dependent => :destroy
  has_many :accounts, :through => :account_games
end

class AccountGame < ActiveRecord::Base
  belongs_to :account
  belongs_to :game
end

现在我知道我想创建一个类似的记录:

@account = Account.new(params[:user])
@account.games << Game.first
@account.save

但是,当我这样做时,我应该如何更新AccountGame中的一些属性?可以说AccountGame有一个名为score的字段,我该如何更新这个属性?你能告诉我最好的方法吗?在我保存对象的同时在直通表中添加任何字段。

2 个答案:

答案 0 :(得分:12)

@account = Account.new(params[:user])
@accountgame = @account.account_games.build(:game => Game.first, :score => 100)
@accountgame.save

虽然我强烈建议您开始在连接模型中添加列,并将其称为不同的列,例如“订阅”或“成员资格”或类似内容。一旦你添加了列,它就不再是一个连接模型而只是一个常规模型。

答案 1 :(得分:2)

这应该有效:

class AccountGame < ActiveRecord::Base
  belongs_to :account
  belongs_to :game
  attr_accessible :account_id, :game_id    #<======= Notice this line
end