2010-05-26 56 views
7

幾個問題:在輔助模塊中調用控制器方法的指導原則?

  1. 是否有可能調用輔助模塊(例如,應用助手)中的控制器的方法?

  2. 如果是這樣,助手如何處理視圖渲染?忽略它?

  3. 在什麼情況下你想從助手調用控制器方法?這是不好的做法嗎?

  4. 你有任何示例代碼,你在helper中調用controller方法嗎?

回答

10

您通常不會從助手調用控制器方法。也就是說:如果你的意思是收集數據然後渲染視圖的方法(任何其他需要調用的方法都可能不在控制器中)。 這絕對是不好的做法,並打破MVC

然而,完全有可能在視圖中提供控制器方法,一個很好的例子就是例如current_user方法。

要在視圖中使用的控制方法,作爲一個輔助方法,只是做

private 

def current_user 
    # do something sensible here 
    @current_user ||= session[:user] 
end 
helper_method :current_user 

這種方法在private節最佳定義,也可以是可作爲動作(如果你您的路由中的通配符)。

0

從助手調用控制器違反了MVC模式。國際海事組織,如果你需要從一個Rails視圖助手(如application_helper)調用控制器,那麼有一些關於可以改進的設計。意圖是幫助者「幫助」意見,因此只能與模型交談。

我不打算在這裏捍衛MVC本身(網上有很多引用),但是這個關於從視圖調用控制器的線程應該讓你開始。

Calling controller from view?(注意,這是一個ASP.NET線程,所以只有高級原則是相關的)。

+0

你鏈接的線程是關於ASP.NET所以它可能沒有太大的幫助。 – 2010-05-26 01:50:18

+0

糟糕。我可以發誓,我看到了一個相對較新的Rails問題,但顯然不是這樣。我想重點是視圖助手應該被視爲視圖的一部分,並且MVC模式在從視圖調用控制器時會皺眉。 Google Googling Rails MVC是OP的一項練習。 – Greg 2010-05-26 02:07:29

8

聲明你的方法對應的控制器

private 
def method_name1 
... 
end 

def method_name2 
... 
end 

上。在控制器的頭部聲明

helper_method :method_name1, :method_name2 

您可能希望私有狀態

下宣佈這些方法就是這樣,現在你可以在幫手上使用你的方法

相關問題