Rails - ApplicationController中find()的obfuscate_id错误

时间:2014-04-02 14:03:32

标签: ruby-on-rails ruby ruby-on-rails-4 gem

我正在使用obfuscate_id gem(https://github.com/namick/obfuscate_id)。

我们通过在每个模型的顶部插入一行来模糊ID:

obfuscate_id

它的效果很好并且符合预期。我的ID被混淆了。

但是,作为我ApplicationController中某些逻辑的一部分,我有一些逻辑来检查当前用户,并且每个控制器都可以访问这些方法作为帮助者:

def current_user

    @current_user ||= User.find(session[:user_id]) if session[:user_id]

end

然而,我收到错误:

  

无法找到ID = 5164061535的用户

似乎无法将混淆的ID转换回find()的正常形式。

如何让控制器识别出在每个模型中所做的混淆。

我的用户模型是这样的:

class User < ActiveRecord::Base

    # This part obfuscates the user ID
    obfuscate_id

    has_one :profile, dependent: :destroy
    has_many :pins
    has_many :replies, through: :pins

end

我有什么想法让ApplicationController认出这个?在每个控制器本身中执行find()很好,但由于ApplicationController没有自己的模型,所以它似乎并不知道它。

谢谢, 迈克尔。

2 个答案:

答案 0 :(得分:1)

试试这个......

 @current_user ||= User.find(User.deobfuscate_id(session[:user_id])) if session[:user_id]

答案 1 :(得分:0)

奇怪的是,我最终尝试了这个:

@current_user ||= User.find_by_id(session[:user_id]) if session[:user_id]

它有效!但是,为什么?

User.find()本身并没有使用这个宝石。所以,虽然它现在正在发挥作用,但它对我的确切原因有点关注。

如果有人可以在这里添加任何东西,那就太棒了。

谢谢!