Rails 3 / devise似乎忽略了自定义控制器

时间:2012-03-17 14:14:01

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

使用设计Rails 3应用程序,我已阅读有关如何自定义后注册路由的wiki / docs,我正在使用可确认模块,所以我认为我需要覆盖after_inactive_sign_up_path_for

我想我已经做得很好,但它完全忽略了我的自定义控制器,并在注册后仍然路由到root_path。让我疯了。

我的注册是使用用户模型,我使用generate任务复制了devise的视图;如果我将它们移动到视图/注册设计回落到默认视图(在我想的宝石中),所以它似乎没有“注意到”我的控制器

我的路线中有这个:

devise_for :users, :controllers => { :registrations => "registrations" }
match 'sign_up_done' => 'home#sign_up_done', :as => :after_sign_up

这是我的控制器:(controllers / registrations_controller.rb)

class RegistrationsController < Devise::RegistrationsController
  def after_inactive_sign_up_path_for(resource)
    after_sign_up_path
  end 
  def after_sign_up_path_for(resource)
   after_sign_up_path
  end
end

(添加after_sign_up_path_for以防万一,使用确认)

它似乎完全忽略了我的控制器,命名错了吗? 感谢您的任何意见!

1 个答案:

答案 0 :(得分:0)

我认为你的文件夹结构可能有问题。尝试这种结构:(它与Gem文件夹中的相同)

app/controllers/devise/registrations_controller.rb
app/views/devise/registrations/new.html.erb
app/views/devise/registrations/edit.html.erb

,控制器文件看起来与gem文件夹中声明的相同:

#app/controllers/devise/registrations_controller.rb

# NOT: class RegistrationsController < Devise::RegistrationsController  , 
# since you are "overwriting" it. 
class Devise::RegistrationsController < DeviseController

  def after_inactive_sign_up_path_for(resource)
    #...
  end 
end