2011-02-15 36 views
5

我已經設法在索引頁面上生成一系列三個按鈕,使用戶能夠識別數據庫中對象的子集 - 按鈕1 - type =「new」 ,按鈕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的3個其他頁面上有類似的功能,即按價格,按品牌和按顏色。我已經把上面提供的相同的代碼放在這3個其他的.html.erb文件的每一箇中,並且再次看起來似乎是行爲...

EXCEPT - 當加載新頁面時,默認是所有產品都是顯示出來,即它沒有記得用戶在前一頁上按下的按鈕。是否可以存儲控制器中所有頁面均可訪問的按鈕按下的信息?同樣/另外,是否有可能以這樣的方式定義@productsmatchingtype(在productfinder_controller中):它可以被所有頁面訪問,並且不需要再次從頭開始?

+1

您可以將狀態存儲在會話中並在下一個請求中檢查它。會議[:something] =「你的價值」 – Rafal 2011-02-15 12:50:47

回答

7

您無法記住變量beetwen請求。但是,您可以將產品類型存儲在會話中:

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 2011-02-15 12:56:09

相關問題