2011-11-30 14 views
6

मैं एक सनस्पॉट/एसओएलआर परिणाम सेट आउटपुट करने के लिए आरएबीएल का उपयोग कर रहा हूं और खोज परिणाम ऑब्जेक्ट कई मॉडल प्रकारों से बना है। वर्तमान में राबल दृश्य में मेरे पास है:रैबल मल्टी-मॉडल संग्रह

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

धन्यवाद नाथन - यह पूरी तरह से काम करता है! वास्तव में मदद की सराहना करते हैं - और आंशिक चीज चीजों को वास्तव में साफ रखती है। – ejlevin1

+0

धन्यवाद, यह वास्तव में मेरी मदद की –

संबंधित मुद्दे