1

我正在编写一个小型论坛应用程序,用户可以在其中创建不同类型的论坛。例如,公告、讨论或问题论坛。

论坛模型有很多帖子和一个forum_type专栏。我想posts#show根据@post.forum_type列使用不同的模板进行渲染。

因此,每个论坛,根据其类型,其帖子将具有不同的外观。

我怎样才能做到这一点,而不用乱扔我的代码if @post.forum_type == 'something'......?

4

1 回答 1

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 方法添加一点逻辑来轻松地为不同的论坛设置皮肤。

于 2013-04-05T16:32:09.997 回答