ejl*_*in1 6 ruby ruby-on-rails rabl
我使用RABL输出Sunspot/SOLR结果集,搜索结果对象由多个模型类型组成.目前在Rabl视图中我有:
object false
child @search.results => :results do
attribute :id, :resource, :upccode
attribute :display_description => :description
code :start_date do |r|
r.utc_start_date.to_i
end
code :end_date do |r|
r.utc_end_date.to_i
end
end
child @search => :stats do
attribute :total
end
Run Code Online (Sandbox Code Playgroud)
以上适用于单一型号; 但是,当多个模型类型在@ search.results集合中时,它会失败,因为这两个类没有相同的实例方法.有谁知道如何根据类型拥有不同的属性?最终,根据对象的类型有条件地在结果集合中扩展不同的模板会很好.像下面的伪代码:
child @search.results => :results do |r|
if r.class == Product
extends "product/base"
else
extends "some other class base"
end
end
Run Code Online (Sandbox Code Playgroud)
小智 7
您可以完全控制"节点",并在"最糟糕"的情况下完全避免此问题:
node :results do
@search.results.map do |r|
if r.is_a?(Product)
partial("product/base", :object => r)
else # render other base class
partial("other/base", :object => r)
end
end
end
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?