2013-12-23 21 views
0

在我應用控制器我有以下代碼:使用是helper_method一個AbstractController ::助手:: ClassMethods在模型

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

簡答:你不能,你不應該。

該模型沒有(也不應該有)視圖和控制器的任何可見性。明確的分離是MVC模式的關鍵原則之一。

如果您希望模型中的某個方法可以訪問當前用戶,請在調用方法時傳遞該用戶。

例如,假設你想通過用戶對早報創建,自定義一個方法

class Post 
    def do_something_with_user(user) 
    # ... 
    end 
end 

,並從控制器調用它

def action 
    Post.find(...).do_something_with_user(current_user) 
end 

有可能的解決方法,如將當前用戶存儲到當前線程或全局變量中,但這會打破規則(並且不應違反規則)。

+0

沒錯。我認爲這可能不是最好的想法,但我知道可以通過包含ActionView :: Helpers將助手添加到模型中。請參閱http://railscasts.com/episodes/132-helpers-outside-views?view=comments。謝謝你! – DMiller

相關問題