2012-10-09 109 views
0

这是极其奇怪的。我正在升级一个Rails 2.3.12应用程序,并一遍又一遍地运行这个相同的问题。我被困住了,似乎没有其他任何东西触及它。不能用has_many关联来批量分配受保护的属性并创建

我有两个型号:

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 

然后正常工作!?

有没有人看到这个?任何线索?

回答

5

在用户日志类,添加以下内容:

attr_accessible :site_id, :controller, :action, :url, :session 

,因为你正在使用那就是靠这个存在了模型的插件,你必须使用attr_accessible的原因是最有可能的。它发生在我们所有人身上,并且是皇室皮塔)

一旦attr_accessible被指定为一个类,那么任何未指定为“accessible”的属性将不被允许更新。

+0

*在他的代码*中。 –

+3

没有..'attr_accessor'存在..但不是'attr_accessible'.. 2个不同的东西..其中一个是ruby,其他rails具体http://apidock.com/rails/ActiveRecord/Base/attr_accessible/class –

+0

是如果它意味着您的网站的属性现在得到更好的保护,那么它真的是一个“皮塔”吗?这个功能虽然实现起来很麻烦,但实际上最终还是非常有用的。 –

相关问题