我正在编写一个小型论坛应用程序,用户可以在其中创建不同类型的论坛。例如,公告、讨论或问题论坛。
论坛模型有很多帖子和一个forum_type
专栏。我想posts#show
根据@post.forum_type
列使用不同的模板进行渲染。
因此,每个论坛,根据其类型,其帖子将具有不同的外观。
我怎样才能做到这一点,而不用乱扔我的代码if @post.forum_type == 'something'
......?
我正在编写一个小型论坛应用程序,用户可以在其中创建不同类型的论坛。例如,公告、讨论或问题论坛。
论坛模型有很多帖子和一个forum_type
专栏。我想posts#show
根据@post.forum_type
列使用不同的模板进行渲染。
因此,每个论坛,根据其类型,其帖子将具有不同的外观。
我怎样才能做到这一点,而不用乱扔我的代码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 方法添加一点逻辑来轻松地为不同的论坛设置皮肤。