在我的应用程序控制器中,我有以下代码:
helper_method :current_user
def current_user
@current_user ||= User.find(session[:user]) if session[:user]
end
我想在模型中使用“current_user”方法。根据rails API,可以在“AbstractController :: Helpers :: ClassMethods”中访问辅助方法 见链接:
http://api.rubyonrails.org/classes/AbstractController/Helpers/ClassMethods.html
当我将其添加到我的模型时,我得到一个找不到方法的错误:
include AbstractController::Helpers::ClassMethods
我是否遗漏了如何包含这些辅助方法的内容?
谢谢!
答案 0 :(得分:0)
简短回答:你不能,也不应该。
模型没有(也不应该)视图和控制器的任何可见性。明确的分离是MVC模式的关键原则之一。
如果您希望模型中的方法可以访问当前用户,则在调用方法时传递用户。
例如,假设您想要在Post创建时传递用户,请定义自定义方法
class Post
def do_something_with_user(user)
# ...
end
end
并从控制器中调用它
def action
Post.find(...).do_something_with_user(current_user)
end
有可能的解决方法,例如将当前用户存储到当前线程或全局变量中,但这会违反规则(并且您不应违反规则)。