【问题标题】:Rendering arrays with elements of different types without using default partial?在不使用默认部分的情况下渲染具有不同类型元素的数组?
【发布时间】:2012-06-25 08:18:34
【问题描述】:

我从轮胎中获得了一组搜索结果,其中包含各种 activemodel 类型的对象,我需要将每个对象呈现为一个字符串。目前,我正在对这些结果进行循环,在每个结果上调用 render_to_string(result)。这将使用该 activemodel 对象的默认部分。

但是,这要求我为每个我希望可搜索的类设置默认部分作为搜索的表示。这意味着我需要在代码中的其他任何地方显式渲染一个集合(所有相同类型),我需要显式指定使用我的通用部分进行渲染,而实际上通用部分应该是默认值。它还提出了一个问题,如果我需要呈现不同类型的不同集合,我会怎么做,因为它会使用与搜索相同的部分。

我真正想要的是能够向 render_to_string 传递一个前缀,告诉它寻找默认的部分,但在这个目录中 - 这意味着我可以保持我的搜索部分分开,同时仍然能够轻松渲染对象。

有没有办法做到这一点或其他更好的解决方案?

【问题讨论】:

  • 你试过render_to_string([:search, result])之类的吗?
  • 我喜欢这个主意,但我得到了':search' is not an ActiveModel-compatible object that returns a valid partial path.

标签: ruby-on-rails ruby partials


【解决方案1】:

我会打电话:

 render_to_string :partial => 'searches/result', :collection => @results

然后在该部分中确定应如何显示单个结果:

case result.class.name
when 'Foo'
...
end

这为我提供了结果格式和显示的单一位置。

【讨论】:

  • 我会试一试,我会更喜欢做一个前缀类的事情,并有单独的部分,但这肯定比我目前的解决方案好得多 :)
  • 也许将'when'子句中的内容分成单独的部分?
  • 我想我可以从类名构建部分名称并使用它来呈现它
  • 我用= render :partial => "search_#{search_result.class.name.downcase}", :object => search_result 写了一个部分,效果很好。谢谢:)
猜你喜欢
  • 2021-03-16
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 2016-07-22
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多