2011-02-15 10 views
5

मैं एक डेटाबेस में वस्तुओं के किसी उप-पहचान के लिए उपयोगकर्ता को सक्षम करने के एक सूचकांक पृष्ठ पर तीन बटन की एक श्रृंखला का उत्पादन करने में कामयाब हो में पृष्ठों के बीच एक पैरामीटर मान याद करने के लिए - बटन 1 - प्रकार = "नया" , बटन 2 - प्रकार = "प्रयुक्त", बटन 3 - कोई प्रतिबंध यानी नया या उपयोग किया जा सकता है।कैसे एक नियंत्रक

वर्तमान में index.html.erb शामिल हैं:

<%= link_to "New", :controller => params[:controller], :action => params[:action], :product_type => 'New' %> 
<%= link_to "Used", :controller => params[:controller], :action => params[:action], :product_type => 'Used' %> 
<%= link_to "Don't Restrict", :controller => params[:controller], :action => params[:action], :product_type => nil %> 

product.rb के भीतर मेरे पास है:

scope :by_product_type, lambda{|product_type| where(:product_type => product_type) unless product_type.nil? } 

अंत में मेरे पास है productfinder_controller:

before_filter :load_grips, :only => [:index, :bybrand, :bycolour, :byprice] 
protected 
def load_products 
if params[:product_type] 
    @productssmatchingtype = Product.by_product_type(params[:product_type]) 
else 
    @productsmatchingtype = Product 
end 
end 

ऊपर कोड वास्तव में काम करता है जैसा कि मैंने आशा की थी, बटन 1 या बटन 2 दबाए जाने पर सभी वस्तुओं को प्रारंभ में लोड करना और उन्हें प्रतिबंधित करना।

मैं भी Productfindercontroller, अर्थात् byprice के भीतर 3 अन्य पृष्ठों पर इसी तरह की सुविधा के लिए, bybrand और bycolour चाहते हैं। मैंने इन 3 अन्य .html.erb फ़ाइलों में से प्रत्येक में ऊपर दिए गए कोड को रखा है और फिर चीजें व्यवहार करने लगती हैं ...

EXCEPT - जब कोई नया पृष्ठ लोड हो जाता है तो डिफ़ॉल्ट है कि सभी उत्पाद हैं दिखाया गया है, यानी यह याद नहीं किया गया है कि उपयोगकर्ता ने पिछले पृष्ठ पर किस बटन को दबाया था। क्या नियंत्रक के सभी पृष्ठों के लिए कहीं भी दबाए गए बटन के बारे में जानकारी संग्रहीत करना संभव है? इसी तरह/वैकल्पिक रूप से, क्या @productsmatchingtype (productfinder_controller में) को इस तरह से परिभाषित करना संभव है कि यह सभी पृष्ठों तक पहुंच योग्य है और फिर से स्क्रैच से शुरू करने की आवश्यकता नहीं है?

+1

आप सत्र में राज्य को स्टोर कर सकते हैं और अगले अनुरोध पर इसकी जांच कर सकते हैं। सत्र [: कुछ] = "आपका मूल्य" – Rafal

उत्तर

7

आप वैरिएबल बीटवेन अनुरोधों को याद नहीं कर सकते हैं। हालांकि आप सत्र में product_type स्टोर कर सकते हैं:

def load_products 
    #get product_type from session if it is blank 
    params[:product_type] ||= session[:product_type] 
    #save product_type to session for future requests 
    session[:product_type] = params[:product_type] 
    if params[:product_type] 
    @productssmatchingtype = Product.by_product_type(params[:product_type]) 
    else 
    @productsmatchingtype = Product 
    end 
end 

यह नौकरी करना चाहिए।

+0

धन्यवाद आप दोनों - पूरी तरह से काम किया! यह जानना बहुत उपयोगी है क्योंकि मैं वैश्विक रूप से मूल्यों को 'अधिक' स्टोर करने के संबंध में पिछले कुछ दिनों से खोज रहा हूं – Texas

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