2009-01-23 135 views
24

我有兩個控制器爲兩個相應的模型,例如,照片和類別。索引和顯示方法在每個控制器中非常相似,並且視圖是相同的。兩種模式共享視圖的最佳方法是什麼?兩個控制器的Ruby on Rails的一個共享視圖

我有,雖然兩個選項:

  • 使用幫手。在助手將把視圖的代碼,並會從每個視圖(照片/視圖和類別/視圖)調用助手

  • 在每個視圖中使用部分。我認爲這是一個更乾淨的解決方案,但在編寫此解決方案時,我會在腦海中看到巨大的DRY。

所以,我有兩個型號兩個控制器,每個人在暴露了一個@photo對象(照片控制器的所有照片和類別控制器只選定categorie的照片),我需要一個視圖同時顯示。

我正在尋找一個優雅的解決方案,抱怨REST和DRY principes。任何想法?

在此先感謝。

回答

38

我和我的一個項目有類似的情況。大多數控制器的所有刪除視圖的樣式都是相同的,顯示相同的確認框,並簡單地呈現任何被刪除對象的可預測顯示。

在我看來,解決方案非常簡單和優雅。簡而言之,我們(開發人員)所做的就是在app/views中創建一個名爲shared的新目錄,並在其中放置共享視圖。這些可能是完整的模板文件或只是部分。

我會建議使用共享模板(既不是類別,也不是照片查看目錄,而是在共享目錄中)並從視圖手動呈現它。

例如具有在兩個控制器的方法本身和一個文件app/views/shared/photo.html.erb

def show 
    @photo = Photo.first # ... or whatever here 
    render :template => 'shared/photo' 
end 

這應成功地呈現共享的模板。這是DRYest路線,當我在每個控制器的視圖目錄中使用或多或少的空視圖時,並沒有感覺到污染,只是爲了包含共享的部分,因爲我的理解是您的問題提示。

1

我會使用助手,因爲它們在視圖之間共享。對於HTML部分,我會使用partials,所以它將是兩種方式的混合。

+0

是的,我認爲這是最好的解決方案,因爲它從每個控制器或視圖的可見性,但是,將視圖代碼(html代碼)放在助手中是否正確? – ARemesal 2009-01-23 13:30:28

+0

最好不要將視圖代碼放在幫助器中,除非它少於幾行 – 2009-01-23 14:00:41

6

關於first答案:

如果部分必須從一個視圖被呈現:

 
<%= render :partial => "shared/photo" %> 

和部分必須在共享/ _photo.html.erb

應用/視圖/
1

這看起來像是一個很好用的Cells寶石。

0

@bjeanes如果你所有的刪除視圖都一樣,你可以創建views/default/delete.html。erb和所有刪除操作將使用它。

這就是我在做什麼:我的大多數觀點都在默認情況下,並只在需要時我創建特定的人

更新:好吧,這個帖子是從2009年,反正我會繼續我的評論在這裏有人像我一樣從Google那裏來到這裏。

相關問題