无法使用has_many关联和create来批量分配受保护的属性

Jos*_*shL 0 activerecord ruby-on-rails-3

这非常奇怪.我正在升级Rails 2.3.12应用程序并一遍又一遍地遇到同样的问题.我很难过,没有别的东西似乎触及它.

我有两个型号:

class User < ActiveRecord::Base
   has_many :logs, :class_name => 'UserLog'
end
Run Code Online (Sandbox Code Playgroud)

class UserLog < ActiveRecord::Base
  attr_accessor :site_id, :controller, :action, :url, :session

  belongs_to :user

  validates_presence_of :user
end
Run Code Online (Sandbox Code Playgroud)

然后在另一个控制器中我这样做:

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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,它非常简单,但当我调用log_user_activity时,我得到了这个:

Can't mass-assign protected attributes: site_id, controller, action, url, session
Run Code Online (Sandbox Code Playgroud)

但是,如果我将所有创建或构建更改为:

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
Run Code Online (Sandbox Code Playgroud)

然后它工作正常!?

有没有人见过这个?有线索吗?

ila*_*rci 5

在UserLog类中,添加以下内容:

attr_accessible :site_id, :controller, :action, :url, :session
Run Code Online (Sandbox Code Playgroud)

您必须使用的原因attr_accessible很可能是因为您正在使用依赖于此模型的插件.它发生在我们所有人身上,是一个皇家皮塔饼)

一旦attr_accessible为类指定,则不允许更新未指定为"可访问"的任何属性.

  • 不..'attr_accessor'存在..但不是'attr_accessible'.. 2个不同的东西..一个是ruby,另一个是具体的http://apidock.com/rails/ActiveRecord/Base/attr_accessible/class (3认同)