2011-11-30 5 views
6

私は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 

上記のモデルは単一のモデルで動作します。ただし、複数のモデルタイプが@ search.resultsコレクション内にある場合、両方のクラスに同じインスタンスメソッドがないため、失敗します。誰かがタイプに基づいて異なる属性を持つ方法を知っていますか?最終的には、オブジェクトのタイプに基づいて、結果コレクション内の別のテンプレートを条件付きで拡張することが良いでしょう。以下の擬似コードのような何か:あなたは完全に「最悪」の場合には「ノード」との完全な制御を取ると、この問題を回避することができます

child @search.results => :results do |r| 
    if r.class == Product 
    extends "product/base" 
    else 
    extends "some other class base" 
    end 
end 

答えて

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 

はその助けをしていますか?

+0

ありがとうございましたNathan - これは完璧に機能しました!本当に助けていただきありがとうございます。 – ejlevin1

+0

ありがとう、これは本当に私を助けた –

関連する問題