在Rails中基于对象类型呈现模板

时间:2013-04-05 16:16:44

标签: ruby-on-rails ruby templates rendering

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

论坛模型有很多帖子和forum_type列。我想基于posts#show列使用不同的模板呈现@post.forum_type

因此,每个论坛,根据其类型,将在其帖子中具有独特的外观。

如果不使用if @post.forum_type == 'something' ...

乱丢我的代码,我怎么能这样做呢?

1 个答案:

答案 0 :(得分:1)

团。编写一个post renderer,然后为每个论坛类型实现一个具体的渲染器子类:

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方法中添加一些逻辑来轻松浏览不同的论坛。