Ruby on rails访问控制器

时间:2015-05-06 04:25:23

标签: ruby-on-rails devise

我重写Devise的Devise::PasswordsController,所以我可以将它用作RESTful Web服务。为此,我已根据设计的原始Devise::PasswordsController class覆盖了所有四种方法(newcreateeditupdate)。除了使用名为update的设计属性的Devise.sign_in_after_reset_password方法之外,它一直很简单。我发现它是在library module中定义的,但是当我尝试访问它时,我收到以下错误:

NoMethodError in Api::V1::PasswordsController#update

undefined method `sign_in_after_reset_password' for Devise:Module

Extracted source (around line #37):
36    resource.unlock_access! if unlockable?(resource)
37    if Devise.sign_in_after_reset_password
38      flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
39      set_flash_message(:notice, flash_message) if is_flashing_format?
40      sign_in(resource_name, resource)

到目前为止,我尝试require 'devise',但它没有用。我用谷歌搜索了一段时间,但也没有找到任何东西。我有点像红宝石和红宝石,所以我真的不知道在哪里看。任何帮助将非常感激。我正在使用RoR 4.2.1Ruby 2.2.1 (2015-02-26)

1 个答案:

答案 0 :(得分:3)

检查您使用的devise gem的版本。我想你使用的是上一个发布的版本(此时为3.4.1。),但是重写了master的代码。

正如您在此处所见:https://github.com/plataformatec/devise/blob/v3.4.1/app/controllers/devise/passwords_controller.rb Devise::PasswordsController在当前发布的版本中未使用sign_in_after_reset_password

以下提交引入了

sign_in_after_reset_password方法:https://github.com/plataformatec/devise/commit/f0992e4a96352dbb2dfec731f46a51f99a013b29