2013-04-05 48 views
1

我正在編寫一個小型論壇應用程序,用戶可以在其中創建不同類型的論壇。例如,公告,討論或問題論壇。在Rails中基於對象類型呈現模板

論壇模式有很多帖子,還有一個forum_type列。我想根據@post.forum_type列使用不同的模板呈現posts#show

因此,每個論壇,根據其類型,它的帖子都會有明顯的外觀。

我該如何做到這一點,而不用亂丟我的代碼if @post.forum_type == 'something' ...?

+0

在其他想法中,如果您只是使用類似於'render:template =>'forums/forum_type_here''但在'render'語句中使用'@ post.forum_type'變量的東西......這個:'render:template => @ post.forum_type'? *(或者,如果它是一個字符串,也許可以在'@ post.forum_type'變量上附加一些東西。)* – summea 2013-04-05 16:27:55

+0

好主意。沒有我想要的那麼幹淨,但是一個很好的選擇。 – dee 2013-04-05 16:46:08

回答

1

代表團。寫個帖子渲染器,然後實現每個論壇類型的一個具體呈現的子類:

class Post 
    attr_accessor :forum_type  
end 

class BaseRenderer 
    def renderer_for(post) 
    # create the correct renderer for the post here 
    end 

    def render_post(post) 
    renderer = renderer_for(post) 
    renderer.to_html # return the results 
end 

class ForumAPostRenderer 
    def initialize(post) 
    @post = post 
    end 

    def render 
    # render the post for forum A here\ 
    end 
end 

class ForumBPostRenderer 
    def initialize(post) 
    @post = post 
    end 

    def render 
    #render post for forum B here 
    end 
end 

這意味着,你可以很容易地實現只是一個渲染和邏輯添加一點點的renderer_for方法皮膚上不同的論壇。

+0

謝謝!聲音風險很低,(我對此很陌生),這些課程在哪裏生活,目錄是什麼?調用代碼是什麼樣子?它是在控制器還是視圖中? – dee 2013-04-05 16:37:50

+0

他們是查看邏輯,而不是控制器邏輯。我會從控制器調用它們 - 它們基本上只是一些稍微複雜的模板,它們包含一些更易於管理的方法中的條件表示邏輯。 – mcfinnigan 2013-04-05 19:10:53

+0

對不起,聲音鈍,但'render'方法會呈現適合對象的html?或者我會從中調用一個模板? – dee 2013-04-06 04:29:02