Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-混淆ApplicationController中find()上的id错误_Ruby On Rails_Ruby_Ruby On Rails 4_Gem - Fatal编程技术网

Ruby on rails Rails-混淆ApplicationController中find()上的id错误

Ruby on rails Rails-混淆ApplicationController中find()上的id错误,ruby-on-rails,ruby,ruby-on-rails-4,gem,Ruby On Rails,Ruby,Ruby On Rails 4,Gem,我正在使用模糊的id gem() 我们通过在每个模型的顶部插入一行来混淆ID: obfuscate_id 它工作得很好,正如预期的那样。我的身份证模糊了 但是,作为我的ApplicationController中某些逻辑的一部分,我有一些逻辑来检查当前用户,每个控制器都可以作为助手访问这些方法: def current_user @current_user ||= User.find(session[:user_id]) if session[:user_id] end 但是,我

我正在使用模糊的id gem()

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

obfuscate_id
它工作得很好,正如预期的那样。我的身份证模糊了

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

def current_user

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

end
但是,我得到一个错误:

找不到id=5164061535的用户

对于find(),它似乎无法将模糊的ID转换回其正常形式

我如何让控制器识别每个模型中产生的混淆

我的用户模型是这样的:

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
class用户
你知道如何让
应用程序控制器
识别这一点吗?在每个控制器中执行find()是可以的,但是由于
ApplicationController
没有自己的模型,它似乎不知道它

谢谢, 迈克尔。

试试这个

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

奇怪的是,我最终尝试了以下方法:

@current_user ||= User.find_by_id(session[:user_id]) if session[:user_id]
成功了!但是,为什么

User.find()
本身无法使用此gem。所以,尽管它现在起作用了,但我还是有点担心到底为什么

如果有人能在这里添加任何内容,那就太好了


谢谢

我不知道,但是如果您尝试user.rb中的自定义方法,比如“def self.theuser(uid)\r self.find(uid)\r end”,然后像user.theuser(session[:user\u id])一样访问,会怎么样呢?我在尝试上面的想法时也会遇到同样的错误!看起来它只是将其传递给user.rb,但最终会遇到相同的问题。奇怪的(虽然看了宝石,他们还是做了猴子补丁:查找,所以我不明白为什么它不能像你编码的那样工作)这不起作用。我得到了相同的错误,但显示了不同的ID:如果运行rails控制台(“rails c”)并键入“User.deobfousate_ID(5164061535)”,则找不到ID=8063132118的用户。返回了什么?如果在rails控制台中运行该命令,我得到:=>“2566236117”。我本以为会有“50”之类的东西,这就是ID最初的含义。知道这里发生了什么吗?…我设法找到了一个解决办法。看到我的答案了吗?有什么想法吗?哦,对了!“查找”方法由模糊的id gem修补。。。“查找方式”不是。我们一直假设会话[:user_id]中存储的id已被混淆。。。如果您可以通过“find_by”检索记录,则表示该记录未被混淆。我们应该已经检查了会话的内容[:user_id]感谢Steve的解释。似乎有点道理!