0

我的Client模型attr_accessible是这样的:

attr_accessible :email, :firm_id, :name, :phone, :last_contact

然后我有这个回调:

after_save :set_score

然后这是set_score方法(为简洁起见截断):

private

def set_score
    score = Score.find_or_create_by_user_id(:user_id => user.id)
    client = self
    firm = self.firm

    days_since_last_contact = (Date.today - client.last_contact).to_i

    score.update_attributes(:firm_size => self.firm_size, :days_since_last_contact => days_since_last_contact)                      

end

这是我得到的错误:

ActiveModel::MassAssignmentSecurity::Error in ClientsController#create

Can't mass-assign protected attributes: days_since_last_contact

app/models/client.rb:124:in `set_score'
app/controllers/clients_controller.rb:67:in `block in create'
app/controllers/clients_controller.rb:66:in `create'

line 124就是上面的那行score.update_attributes...

我没有名为days_since_last_contact. 那是作为Date计算结果的局部变量。

关于这里可能发生的事情的想法?

编辑1:

Score的属性可访问白名单:

attr_accessible :client_id, :days_since_contact....
4

1 回答 1

1

模型中的属性名称不存在。要么你打错了,要么你的代码错了。

正如您所说,模型中属性的名称是days_since_contact, not days_since_last_contact,因此修复它应该可以解决您的问题。:)

于 2012-11-23T23:46:13.103 回答