这非常奇怪。我正在升级Rails 2.3.12应用程序并一遍又一遍地遇到同样的问题。我很难过,似乎没有别的东西可以触及它。
我有两种模式:
class User < ActiveRecord::Base
has_many :logs, :class_name => 'UserLog'
end
和
class UserLog < ActiveRecord::Base
attr_accessor :site_id, :controller, :action, :url, :session
belongs_to :user
validates_presence_of :user
end
然后在另一个控制器中我这样做:
def log_user_activity
@current_user.logs.create(:site_id => @site.id, :controller => params[:controller],
:action => params[:action], :url => request.path,
:session => request.session_options[:id]) if @current_user
end
正如您所看到的,它非常简单,但当我调用log_user_activity时,我得到了这个:
Can't mass-assign protected attributes: site_id, controller, action, url, session
但是,如果我将所有创建或构建更改为:
def log_user_activity
log = @current_user.logs.new
log.site_id = @site.id
log.controller = params[:controller]
log.action = params[:action]
log.url = request.path
log.session = request.session_options[:id]
log.save
end
然后它工作正常!?
有没有人见过这个?有线索吗?
答案 0 :(得分:5)
在UserLog类中,添加以下内容:
attr_accessible :site_id, :controller, :action, :url, :session
您必须使用attr_accessible
的原因很可能是因为您正在使用依赖于此模型的插件。它发生在我们所有人身上并且是皇家皮塔饼)
为类指定attr_accessible
后,将不允许更新任何未指定为“可访问”的属性。