1

我有一个包含几个不同类的实例的集合,我想为每个实例呈现部分。我可以使用以下代码执行此操作:

<%= render @results %>

我的问题是:如何在不同的基本目录中呈现不同的部分?上面的代码将查找 app/views/stories/_story.html.erb,但是,此操作的部分内容都保存在不同的目录中 - app/search/_story.html.erb。有没有办法指定这个?

4

3 回答 3

2

您可以像这样创建一个辅助方法:

def render_results(results)
  result_templates = {"ClassA" => "search/story", "ClassB" => "something/else"}
  results.each do |result|
    if template = result_templates[result.class.name]
      concat render(:partial => template, :object => result)
    end
  end
end

然后在视图调用中<% render_results(@results) %>

于 2009-07-22T12:38:49.197 回答
2

或者你可以使用 is_a?(Object)

if is_a?(classA)
 render something_A
elsif is_a?(classB)
  render something_B
end
于 2012-11-21T09:49:13.600 回答
1

我有一个类似的情况,我有多个类,所以我为每个类使用一个部分,例如:

for result in @results
  = render :partial => "result_#{result.class.to_s.downcase}", :locals => {:item => result}
end
于 2009-07-22T14:27:42.757 回答