升级到ruby 1.9.3后设计current_user奇怪的行为

时间:2013-07-30 08:12:21

标签: ruby-on-rails devise ruby-1.9.3

我已将项目从ree-1.8.7升级到1.9.2p429。

我的设计模型中有一个名为silhouette_user_id的属性。在视图中,偶尔在我的ruby代码中,调用

current_user.silhouette_user_id

返回与

不同的(和错误的)值
current_user[:silhouette_user_id]

返回正确的值。

虽然我可以搜索并替换以修复此问题,但我担心其他属性的行为方式会相同。这是一个大项目,我真的需要确定为什么会发生这种情况。

非常感谢任何想法。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。在升级过程中,我曾试图更新我为User类定义新方法的方式。不幸的是,我做错了。我用了

  def define_new_method(key, value)
    self.class.send(:define_method, key.to_sym) do
       value
    end
  end

实际上改变了CLASS用户的方法而不是它想要的实例。改为:

  def define_new_method(key, value)
    define_singleton_method key.to_sym, lambda { value }
  end

导致只为预期的实例定义新方法,而不是为current_user实例定义。