我正在編寫一個小型論壇應用程序,用戶可以在其中創建不同類型的論壇。例如,公告,討論或問題論壇。在Rails中基於對象類型呈現模板
論壇模式有很多帖子,還有一個forum_type
列。我想根據@post.forum_type
列使用不同的模板呈現posts#show
。
因此,每個論壇,根據其類型,它的帖子都會有明顯的外觀。
我該如何做到這一點,而不用亂丟我的代碼if @post.forum_type == 'something'
...?
我正在編寫一個小型論壇應用程序,用戶可以在其中創建不同類型的論壇。例如,公告,討論或問題論壇。在Rails中基於對象類型呈現模板
論壇模式有很多帖子,還有一個forum_type
列。我想根據@post.forum_type
列使用不同的模板呈現posts#show
。
因此,每個論壇,根據其類型,它的帖子都會有明顯的外觀。
我該如何做到這一點,而不用亂丟我的代碼if @post.forum_type == 'something'
...?
代表團。寫個帖子渲染器,然後實現每個論壇類型的一個具體呈現的子類:
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方法皮膚上不同的論壇。
謝謝!聲音風險很低,(我對此很陌生),這些課程在哪裏生活,目錄是什麼?調用代碼是什麼樣子?它是在控制器還是視圖中? – dee 2013-04-05 16:37:50
他們是查看邏輯,而不是控制器邏輯。我會從控制器調用它們 - 它們基本上只是一些稍微複雜的模板,它們包含一些更易於管理的方法中的條件表示邏輯。 – mcfinnigan 2013-04-05 19:10:53
對不起,聲音鈍,但'render'方法會呈現適合對象的html?或者我會從中調用一個模板? – dee 2013-04-06 04:29:02
在其他想法中,如果您只是使用類似於'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
好主意。沒有我想要的那麼幹淨,但是一個很好的選擇。 – dee 2013-04-05 16:46:08