2011-11-16 63 views
0

我會保持它簡短:我應該從Controller1調用Controller2.getByCriteria(some, criteria, here)然後設置一個實例變量供視圖使用,或者我應該從Controller1的視圖調用它使用類似= render Controller2.getByCriteria(some, criteria, here)從視圖調用控制器操作...或不?

回答

2

一般來說,從另一個調用一個控制器的動作是一個設計錯誤。這意味着你有共同的業務邏輯,這意味着代碼應該在models(或者可能是lib),或者你有共同的查看邏輯,這意味着代碼應該在helpers

所以你的情況,我想用一個幫手似乎貼切:

module ApplicationHelper 
    # ... 
    def getByCriteria(some, criteria, here) 
    # handle criteria here 
    # Something like: 
    # render :partial => 'foo' 
    end 
    # ... 
end 

,然後簡單地從視圖調用它。

如果您想在整個應用程序中使用完整的控制器/視圖,例如組件共享,您可以使用名爲cells的gem。它使您能夠創建可重複使用的控制器並查看組件。

+0

我可以做一些像 =呈現getByCriteria(一些,條件,在這裏) 在視圖中並讓getByCriteria()返回一個數組嗎? –

2

正確的做法是將控制器方法(不是控制器操作)聲明爲幫助器。

See here

相關問題