1

我已經看了幾個有關使用current_user作爲觀察者的問題,並試圖實現一個人說的,但它不工作(see here)。Observer的未定義局部變量或方法`current_user'?

我試圖創建一個由我的觀察員當複選框被標記爲真正的工程師。工程師和軍隊屬於用戶:

型號/ user.rb

class User < ActiveRecord::Base 
    cattr_accessor :current 
    has_many :armies 
    has_many :engineers 
end 

控制器/ application_controller.rb

class ApplicationController < ActionController::Base 
    protect_from_forgery 
    before_filter :set_time_zone, :set_current_user 

    private 

    def set_current_user 
    User.current = current_user 
    end 
end 

型號/ army_observer.rb

class ArmyObserver < ActiveRecord::Observer 
    def after_save(army) 
    if army.siege 
     Engineer.create({ :user_id => current_user.id, :army_id => :army_id }) 
    end 
    end 
end 

有了這個代碼,它給我的錯誤:

undefined local variable or method `current_user' for #<ArmyObserver:0x4e68970> 

任何其他方式?也許它與Devise current_user方法衝突?也許最好把current_user保存在控制器中?如果是的話,我會怎麼做?

感謝一個新手學習仍然。

回答

2

您正在將Devise的current_user分配給User.current類訪問器,原因正是因爲它在模型(和觀察者)級別上不可用。因此,而不是試圖用current_user那裏,用剛剛創建的類訪問:

Engineer.create({ :user_id => User.current.id, :army_id => :army_id }) 

編輯:

順便說一句,我不認爲這是線程安全的 - 除非你也實現the first part of this solution在一個鏈接您引用的帖子的答案。

相關問題