1

我已经查看了几个关于使用current_user观察者的问题,并试图实现一个人所说的但它不起作用(见这里)。

当复选框标记为 true 时,我正在尝试由我的观察者创建一个工程师。工程师和军队属于用户:

模型/用户.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>

还有什么办法吗?也许它与设计 current_user 方法冲突?也许最好将其保留current_user在控制器中?如果是这样,我会怎么做?

感谢刚刚学习的新手。

4

1 回答 1

2

您将设计分配给current_userUser.current访问器正是因为它在模型(和观察者)级别上不可用。因此,不要尝试在current_user那里使用,而是使用您刚刚创建的类访问器:

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

编辑:

顺便说一句,我认为这不是线程安全的 - 除非您还实现了该解决方案的第一部分,该部分链接在您引用的帖子的答案之一中。

于 2012-08-08T21:38:11.203 回答