【问题标题】:Overriding devise recoverable覆盖设计可恢复
【发布时间】:2018-07-24 10:14:21
【问题描述】:

由于我的声誉低于 50,因此我无法在此帖子In Rails Devise gem how to modify the send_reset_password_instructions method? 中接受的答案下方发表评论以获取更多信息。

我想在设计中自定义 recoverable.rb。我使用路径 lib/devise/models/recoverable.rb 在我的文件夹中制作了它的副本。问题是当请求发送重置密码指令时,我收到错误undefined method activerecord51? for Devise:Module。我该如何解决这个问题?

我的 recoverable 似乎不在设计模块中。我尝试在 lib/ 文件夹中复制 devise.rb 。但这无济于事。

有人可以帮忙吗?

编辑

抱歉给您带来不便。目前我只是想将更多选择传递给方法send_reset_password_instructions

对此有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    在一些 Rails 初始化程序中如何做呢?您可能正在覆盖原始类/模块,因此所有其他方法都消失了。

    # config/initalizers/devise.rb
    Devise::Models::Recoverable::ClassMethods.module_eval do
      def send_reset_password_instructions(your, params)
        token = set_reset_password_token
        send_reset_password_instructions_notification(token)
    
        token
      end
    end
    

    【讨论】:

    • 感谢您的回复。如果我想在设计中使用原始方法(如生成令牌)怎么办?
    • 那是一个不同的问题。但是您可以将这两种方法合并到您的覆盖中。但由于它是一个覆盖它的好......覆盖。您可以尝试不覆盖它并在Devise::Models::Recoverable 中添加一个单独的方法。所以你有像Devise::Models::Recoverable.method_nameDevise::Models::Recoverable.my_method_name 这样的东西。
    • 嗨@Denny Mueller,我真的不明白。顺便说一句,我更新了我的问题。它有助于您更多地了解我的问题吗?无论如何,感谢您的宝贵时间。
    • 更新了我的答案。这是覆盖原始模块中特定方法的一种方式。并保持模块的其余部分完好无损。如果您将module Devise::Models::Recoverable 放在 lib 文件夹中,那么您将覆盖整个模块,并且您未复制的所有其他内容都将消失。
    • 刚试了一下,把你的代码放在config/initalizers/devise.rb,但得到错误wrong number of arguments (2 for 1): App 1230 stdout: (gem) devise-2.2.3/lib/devise/models/recoverable.rb:108:in send_reset_password_instructions'`。也许该方法还没有被覆盖
    猜你喜欢
    • 2013-04-27
    • 2014-04-22
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    相关资源
    最近更新 更多