0

我在 task.rb 中有以下代码:

  before_update :update_inspector

  protected
  def update_inspector
    self.inspector_id = User.current.employee.id
  end

它工作正常。

但是,我希望能够使用 REST 更新任务。因此,使用 REST 时不会有当前用户。

所以,我尝试了这个:

  before_update :update_inspector, :unless => User.current.employee.id.empty

  protected
  def update_inspector
    self.inspector_id = User.current.employee.id
  end

但是,它不起作用。

我也试过:

:unless => User.current.employee.id = nil

谢谢您的帮助 !!!

更新1

我也试过这个:

before_update :update_inspector

protected
def update_inspector
  self.inspector_id = User.current.employee.id unless User.current.employee.id.nil?

end

更新2

我可以访问 User.current.employee.id,因为它在我的 user.rb 中:

 def self.current
   Thread.current[:user]
 end
 def self.current=(user)
   Thread.current[:user] = user
 end

更新3

我的最后一次尝试给了我这个:

  > undefined method `employee' for nil:NilClass

app/models/task.rb, line 30
---------------------------

``` ruby
 25   
 26     before_update :update_inspector
 27   
 28     protected
 29     def update_inspector
>  30       self.inspector_id = User.current.employee.id unless User.current.employee.id.nil?
 31   
 32     end
 33   
 34   end
4

2 回答 2

0

如果您希望在某些情况下不是当前用户,则根本无法调用User.current.employee,因为User.currentwill benil导致此错误:

nil:NilClass 的未定义方法“员工”

这个怎么样:

before_update :update_inspector

protected
def update_inspector
  self.inspector_id = User.current.employee.id unless User.current.nil?
end

这样,您甚至都不会尝试调用.employeeif User.currentis方法nilEmployee您可以通过使用employee_id而不是进一步优化它以避免记录的数据库查找employee.id

self.inspector_id = User.current.employee_id unless User.current.nil?
于 2013-04-27T18:53:00.900 回答
0

问题User.currentnil。尝试访问超出该点的任何方法将导致错误,因为employee不是在NilClass. 您应该将您的条件更改为:

before_update :update_inspector, :if => lambda { User.current }
于 2013-04-27T18:55:22.130 回答