我有一个包含几个不同类的实例的集合,我想为每个实例渲染部分。我可以使用以下代码执行此操作:
<%= render @results %>
我的问题是:如何在不同的基目录中呈现不同的部分?上面的代码将查找app / views / stories / _story.html.erb,但是,此操作的部分内容都保存在不同的目录 - app / search / _story.html.erb中。有没有办法指定这个?
答案 0 :(得分: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) %>
答案 1 :(得分:2)
或者您可以使用is_a?(对象)
if is_a?(classA)
render something_A
elsif is_a?(classB)
render something_B
end
答案 2 :(得分:1)
我有类似的情况,我有多个类,所以我对每个类使用一个部分,如:
for result in @results
= render :partial => "result_#{result.class.to_s.downcase}", :locals => {:item => result}
end