我正在制作游戏,并拥有游戏模型和用户模型。
游戏模型如下所示:
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?
答案 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)