我有一个小问题,我无法追查。基本上我有我的应用程序控制器,在我的应用程序控制器中我有一个方法:
def getCategories
@categories = Category.all
end
没什么特别的,我有一个侧边栏局部视图,我加载到我的主布局。几乎所有的控制器/动作都加载了这个部分,只有很少的例外,所以为了避免总是声明这个方法我只需要一个before_filter来调用这个方法,这样@categories
就会自动包含在所有控制器中。
现在的问题是当我尝试使用设计登录视图时它会尝试将我重定向到root
但是由于某种原因,@categories
不包括在内并反过来抛出此异常:
NoMethodError in Devise::Sessions#create
这是令人困惑的,因为根据设计文档,如果您在处理用户登录后设置root :to => 'home#index'
用户登录用户应重定向到指向归属控制器的root,该归属控制器应该由before_filter
包括{ {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