呈现异构集合:如何为partials指定单个目录?

时间:2010-11-10 19:15:54

标签: ruby-on-rails collections partial-views render

我有一个@comments集合,它是异构但是分层的。每个注释都是Comment的实例或某些派生类,如ActionComment或InactionComment。我为每种类型的评论呈现不同的部分。 View代码是:

= render @comments

由于所有部分都是相关的,我想将它们保存在一个视图目录中,即:

  • 应用程序/视图/评论/ _comment.haml
  • 应用程序/视图/评论/ _action_comment.haml
  • 应用程序/视图/评论/ _inaction_comment.haml

但是现在为了使用正确部分的自动渲染,我使用的是单独的目录,如:

  • 应用程序/视图/评论/ _comment.haml
  • 应用程序/视图/ action_comments / _action_comment.haml
  • 应用程序/视图/ inaction_comments / _inaction_comment.haml

2 个答案:

答案 0 :(得分:4)

Rails 3.2提供了一个Model#to_partial_path方法,允许您(顾名思义)覆盖部分路径名。

  def to_partial_path
    self.action.to_s
  end

它返回的路径不包括前导下划线,并假设它相对于.../views/modelname/。有关概述,请参阅http://blog.plataformatec.com.br/2012/01/my-five-favorite-hidden-features-in-rails-3-2/

答案 1 :(得分:1)

你不能像神奇地那样做,但你可以通过单独渲染每个项目并指定部分来实现。

haml中的

示例:

- @comments.each do |c|
  = render :partial => "comments/#{c.class.to_s.underscore}", :locals => {:comment => c}