在模型中使用helper_method AbstractController :: Helpers :: ClassMethods

时间:2013-12-23 20:37:54

标签: ruby-on-rails ruby

在我的应用程序控制器中,我有以下代码:

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 

我是否遗漏了如何包含这些辅助方法的内容?

谢谢!

1 个答案:

答案 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

有可能的解决方法,例如将当前用户存储到当前线程或全局变量中,但这会违反规则(并且您不应违反规则)。