所以我有一个Admin
命名空间和一个sessions
控制器。
当我生成控制器时还有一个admin/sessions_helper.rb
,所以我一直在设置一些方法,但是我似乎无法调用它们。这是命名空间吗?
错误
undefined local variable or method `sign_out' for #<Admin::SessionsController:0x007fe2b2f55680>
def destroy
sign_out
redirect_to admin_path
end
end
sessions_controller.rb
class Admin::SessionsController < AdminController
...
def destroy
sign_out
redirect_to admin_path
end
end
系统管理员/ sessions_helper.rb
module Admin::SessionsHelper
...
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
end
请注意,我没有在任何地方包含帮助程序,因为在文档中它表示all helpers are included by default。
答案 0 :(得分:3)
控制器中没有助手。帮助程序旨在混合到视图上下文中。
有一些解决方法可以让帮助程序对视图和控制器都可用,但实际上它应该是有意义的。您定义的sign_out
方法在视图中根本没有意义。
我建议你在AdminController
中定义它(它看起来是所有管理控制器继承自的基本控制器)。
module AdminController
...
private
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
end
请务必将其标记为私有,否则Rails可能会将其用作控制器操作。
答案 1 :(得分:1)
在不包含模块的情况下从控制器调用辅助方法的好方法是使用view_context:
class Admin::SessionsController < AdminController
def destroy
view_context.sign_out
redirect_to admin_path
end
end
但我同意@ simone-carletti,这不是一种帮助方法。