【问题标题】:How do I call the fully qualified Devise sign_in method?如何调用完全限定的 Devise sign_in 方法?
【发布时间】:2014-06-03 00:07:08
【问题描述】:

如何明确调用 Devise sign_in?我的控制器中已经有一个名为 sign_in 的方法。

我试过了

require 'devise/controllers/sign_in_out'
  Devise::Controllers::SignInOut.sign_in @user

cannot load such file -- devise/controllers/sign_in_out

include Devise::Controllers::Helpers
  Devise::Controllers::Helpers.sign_in @user

undefined method `sign_in' for Devise::Controllers::Helpers:Module

但都没有用。

我也试过

alias_method :devise_sign_in, :sign_in # keep hold of the Devise sign_in method before we overwrite it.
  devise_sign_in @user

它在浏览器中工作,但是当我运行 rspec 时它给出了这个错误:

/rsync/BK-Development/app/controllers/community_members_controller.rb:5:in alias_method': undefined methodsign_in' for class CommunityMembersController' (NameError) from /rsync/BK-Development/app/controllers/community_members_controller.rb:5:in'

我在这里找到了方法的来源:

https://github.com/plataformatec/devise/blob/v2.2/lib/devise/controllers/helpers.rb

设计版本 2.2.8

【问题讨论】:

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


    【解决方案1】:

    好的,我可以使用它

    include Devise::Controllers::Helpers
    alias_method :devise_sign_in, :sign_in # keep hold of the Devise sign_in method before we overwrite it.
    ...
      devise_sign_in @user
    

    我还是想知道如何直接调用方法。在 Java 中,您可以通过指定完整的包和方法来调用任何方法。在 Ruby 中也应该有办法做到这一点。

    【讨论】:

    • 令人惊讶的是没有...你可以试试Class.new.extend(Devise::Controllers::Helpers).sign_in(user)
    • 这些都不适合我,但控制器在引擎中。这些行应该在控制器中的确切位置以及过载的触发器是什么?
    猜你喜欢
    • 2018-02-08
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多