2010-04-24 9 views
5

गेडे दोस्तों, मुझे अपने सिस्टम में कई हजार व्यापार वस्तुओं की प्रस्तुति फ़िल्टर करने में कोई समस्या है। सिस्टम की चश्मे के अनुसार हम इमारत कर रहे हैं, हमारे पास एक ऐसा फॉर्म होना है जो वस्तुओं की प्रस्तुति को फ़िल्टर करने के लिए लोगों को प्रारंभ तिथि और फिर मिनटों में अंतराल डालने की अनुमति देता है। मैंने अपने अंतराल कार्यों के भीतर सभी ट्रेडों को वापस करने के लिए अपने सहायक कार्यों का निर्माण किया है, लेकिन मैं अपने जीवन के लिए उचित रूप से फॉर्म का निर्माण नहीं कर सकता जो एक तिथि समय मूल्य और सूचकांक पृष्ठ के शीर्ष के भीतर एक पूर्णांक मान लौटाएगा?एक इंडेक्स पेज फ़िल्टर करने के लिए रेल फॉर्म का निर्माण?

कोई विचार? क्या मुझे मान असाइन करने के लिए एक अलग मॉडल ऑब्जेक्ट बनाना होगा, या क्या कोई आसान तरीका है?

उत्तर

16

अपनी अनुक्रमणिका पृष्ठ पर आप इस प्रकार का फ़िल्टर प्रपत्र बना सकते हैं

<%= form_tag '', :method => :get do %> 
    <%= text_field_tag :value_one %> 
    <%= text_field_tag :value_two %> 
    <%= submit_tag 'Filter' %> 
<% end %> 

आपका प्रपत्र तो क्वेरी स्ट्रिंग पैरामीटर के साथ और फिर अपने नियंत्रक में आप फ़िल्टर पैरामीटर के लिए देख सकते अपने पृष्ठ पर एक प्राप्त करना होगा कि हो सकता है हो सकता है।

+2

यदि आप यूआरएल से 'और प्रतिबद्ध = फ़िल्टर' को छोड़ना चाहते हैं तो आप '<% = submit_tag' फ़िल्टर ', नाम: nil%> 'लिख सकते हैं। –

2

मैं धीरे-धीरे एक फिल्टर मेरी नियंत्रक में, यानी निर्माण पसंद:

def index 

    filter = [] 

    if params.has_key?("filter") 

    if !params[:filter][:user_id].blank? 
     id = params[:filter][:user_id] 
     filter << ["user_id = #{id.to_i}"] 
    end 

    if !params[:filter][:project_id].blank? 
     id = params[:filter][:project_id] 
     filter << ["project_id = #{id.to_i}"] 
    end 

    if !params[:filter][:change_type_id].blank? 
     id = params[:filter][:change_type_id] 
     filter << ["change_type_id = #{id.to_i}"] 
    end 

    end 

    @logs = LogEntry.where(filter.join(" AND ")).order('created_at DESC')  

end 

कोई फ़िल्टर आपके विचार में चुना जाता है (मैं select_tag प्रपत्र सहायक का उपयोग करें), अपने डीबी क्वेरी सभी रिकॉर्ड वापस आ जाएगी।

+1

मुझे यह दृष्टिकोण पसंद है (यह प्रश्न के उत्तर का दूसरा हिस्सा है!)। शायद '! पैराम्स [...] खाली के बजाय?' यह पैराम [...] के साथ थोड़ा सुंदर है। वर्तमान? –

+4

असल में आपको धीरे-धीरे इस तरह का फ़िल्टर बनाने की ज़रूरत नहीं है, इसके बजाय आपको धीरे-धीरे परिणाम सेट को धीरे-धीरे कम करने के लिए विभिन्न स्थितियों के लिए कहां बयान कहकर एक सक्रिय रिकॉर्ड क्वेरी बनाना चाहिए। Rails एक सब कथन में इसे निष्पादित करने के लिए पर्याप्त स्मार्ट है भले ही आपके पास LogEntry मॉडल पर एकाधिक कॉल हों। – Noz

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