我有一个包含几个不同类的实例的集合,并且我想渲染每个实例的部分。在Rails中渲染不同类的集合
<%= render @results %>
我的问题是:我如何呈现一个不同的根目录不同的谐音,我可以使用下面的代码做到这一点?上面的代码将查找app/views/stories/_story.html.erb,但是,此操作的部分内容都保存在不同的目录 - app/search/_story.html.erb中。有什么方法可以指定这个吗?
我有一个包含几个不同类的实例的集合,并且我想渲染每个实例的部分。在Rails中渲染不同类的集合
<%= 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) %>
我有一个类似的情况我有多个类,所以我使用的部分像每个类:
for result in @results
= render :partial => "result_#{result.class.to_s.downcase}", :locals => {:item => result}
end
,或者您可以使用is_a(对象)
012?
这是我用于多模型搜索结果的一个区别:如果您通过`:结果`通过`:collection`而不是使用本地和`for`或`每个`块,每个对象被分配到其部分的`partialname`变量。这避免了抽象的变量,比如“item”(没有冒犯!)散布在不同的类的视图上下文中,并保留了语义上的意义。 `school.address`与`school`部分内的`item.address`。如果你不想使用默认的`classnames/_classname`部分位置,这会更复杂一些。 – Eric 2014-03-29 17:19:53