2012-01-01 100 views
1

我正在使用STI子類並且希望針對不同的子類指向不同的視圖。此刻,我的路由子類話題的主類的文章是這樣的:子類的不同視圖

resources :topics, :controller => 'articles' 

有一個簡單的辦法直接到不同的看法?


編輯

我發現這樣做的最好的辦法是:

<% case%> 
    <% when @article.type == 'Topic' %> 
     <%= render 'topic' %> 
    <% else %> 
     <%= render 'article' %> 
    <% end %> 

回答

1

如果你的名字你的觀點巧妙的話,你可能只是做

​​

render :partial => @article.type 

否則,您可以在所有STI子類中定義一個返回要顯示的部分/頁面名稱的方法,這樣可以避免控制器中的所有if/else邏輯。

另一種方法是爲不同的子類分開控制器,但這不是一個好的設計。如果你要走這樣的道路,畢竟STI不是最好的辦法。

+0

'type'將是一個類名,視圖通常是下劃線的小寫,所以'render @ article.type.underscore'比'@ article.type'更好。 – 2012-01-01 23:30:05

+0

謝謝 - 第一種方法非常聰明,我可能會使用。但是,你能否給我一個例子或指針,讓你知道第二種方法 - 我將如何編寫這樣的方法? – Edward 2012-01-02 11:19:46

+0

也感謝mu。 – Edward 2012-01-02 11:22:20