2011-11-30 14 views
6

Sto utilizzando RABL per produrre un set di risultati Sunspot/SOLR e l'oggetto dei risultati di ricerca è composto da più tipi di modello. Attualmente all'interno della visualizzazione rabl ho:Rabl Raccolta multi-modello

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 

Quanto sopra funziona per un singolo modello; tuttavia, quando più tipi di modello si trovano all'interno della raccolta @ search.results, non riesce perché entrambe le classi non hanno gli stessi metodi di istanza. Qualcuno sa come avere attributi diversi in base al tipo? In definitiva, sarebbe bello estendere condizionalmente un modello diverso all'interno della raccolta dei risultati in base al tipo di oggetto. Qualcosa come il pseudo codice qui sotto:

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

risposta

7

Si può prendere il pieno controllo con 'nodo' e evitare questo problema del tutto nel caso 'peggiore':

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 

fa questo aiuto?

+0

Grazie Nathan: ha funzionato perfettamente! Apprezzo davvero l'aiuto - e la cosa parziale mantiene le cose veramente pulite. – ejlevin1

+0

Grazie, mi ha davvero aiutato –

Problemi correlati