在Rails中呈现不同类的集合

时间:2009-07-22 10:16:40

标签: ruby-on-rails partials

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

<%= render @results %>

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

3 个答案:

答案 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