0

これは非常に奇妙です。Rails 2.3.12 アプリをアップグレードしていますが、同じ問題が何度も発生しています。私は困惑しており、他に何も触れていないようです。

私は2つのモデルを持っています:

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

そしたらうまくいく!?

誰もこれを見たことがありますか?手がかりはありますか?

4

1 に答える 1

5

クラス UserLog に、次を追加します。

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

使用しなければならない理由attr_accessibleは、これがモデルに存在することに依存しているプラ​​グインを利用している可能性が高いためです。それは私たち全員に起こり、王室のピタです)

attr_accessibleクラスに指定されると、「アクセス可能」として指定されていない属性は更新できなくなります。

于 2012-10-09T19:57:29.523 に答える