我有一个@comments集合,它是异构但是分层的。每个注释都是Comment的实例或某些派生类,如ActionComment或InactionComment。我为每种类型的评论呈现不同的部分。 View代码是:
= render @comments
由于所有部分都是相关的,我想将它们保存在一个视图目录中,即:
但是现在为了使用正确部分的自动渲染,我使用的是单独的目录,如:
答案 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}