设计Devise中的NoMethodError :: Sessions #create

时间:2014-02-04 09:12:17

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

我有一个小问题,我无法追查。基本上我有我的应用程序控制器,在我的应用程序控制器中我有一个方法:

def getCategories
  @categories = Category.all
end

没什么特别的,我有一个侧边栏局部视图,我加载到我的主布局。几乎所有的控制器/动作都加载了这个部分,只有很少的例外,所以为了避免总是声明这个方法我只需要一个before_filter来调用这个方法,这样@categories就会自动包含在所有控制器中。

现在的问题是当我尝试使用设计登录视图时它会尝试将我重定向到root但是由于某种原因,@categories不包括在内并反过来抛出此异常:

NoMethodError in Devise::Sessions#create

这是令人困惑的,因为根据设计文档,如果您在处理用户登录后设置root :to => 'home#index'用户登录用户应重定向到指向归属控制器的root,该归属控制器应该由before_filter包括{ {1}}变量。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

也许您可以尝试添加新的控制器“注册”并添加您的方法:

class RegistrationsController < Devise::RegistrationsController

   def getCategories
      @categories = Category.all
   end

end

然后修改config / routes.rb以使用新控制器

修改routes.rb中的devise_for行,如下所示。

devise_for :users, :controllers => { :registrations => "registrations" }

替换root :to => 'home#index'
  devise_scope :user do
    match "/", to: "devise/registrations#new", via: 'get'
  end