如何创建附加到两个用户的模型?不干扰attr_accessible

时间:2012-06-20 05:53:59

标签: ruby-on-rails ruby-on-rails-3 model attr-accessible

我正在制作游戏,并拥有游戏模型和用户模型。

游戏模型如下所示:

class Game < ActiveRecord::Base
  belongs_to :first_user, :class_name => 'User', :foreign_key =>'first_user_id'
  belongs_to :second_user, :class_name => 'User', :foreign_key =>'second_user_id'
  validates_presence_of :first_user, :second_user

  attr_accessible :created_at, :finished_datetime, :first_user_id, :second_user_id, :status, :winner_user_id
  ...

现在,在我的游戏控制器中,我打电话给Game.new。我确定它是使用current_user和challenge_user调用的,因为我检查了日志。

Game.new(:first_user => current_user, :second_user => challenge_user) 

不幸的是,我收到错误:

Can't mass-assign protected attributes: first_user, second_user

我不明白,因为我使用的是attr_accessible,而不是attr_accessor,因此它们应该是可分配的。我应该做些什么,Rails?

1 个答案:

答案 0 :(得分:1)

您传入的所有内容,例如.new.update_attributes作为属性都是“批量分配”。您需要“手动”分配它们,如下所示:

@game = current_user.games.new(params[:my_game_mass_assignment_attributes])
@game.second_user = # your second user

一次分配一个属性不是“大规模分配”,并且出于安全考虑会起作用(参见http://guides.rubyonrails.org/security.html#mass-assignment