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