1

我正在制作游戏,并且有一个 Game 模型和一个 User 模型。

游戏模型如下所示:

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,我应该怎么做?

4

1 回答 1

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

于 2012-06-20T05:57:07.727 回答