2011-11-14 20 views
0

所以我有過這種工作在過去的各種形式,但從來沒有一起工作。Rails,如何使用searchlogic重新排序返回的對象

僅供參考我有類別/品牌/產品,有正確的關係工作:該網站是http://emeraldcityguitars.com看到它的行動。

所以在我的品牌控制器show動作:

@category = Category.find_by_url_name(params[:category_id]) 
    @brand = Brand.find(params[:id]) 
    @search = Product.brand_id_equals(@brand.id).category_id_equals(@category.id).descend_by_price 
    @products = @search.paginate(:page => params[:page])  

這工作得很好,因爲在我的日誌證明:

Category Load (25.6ms) SELECT * FROM "categories" 
    Category Load (0.2ms) SELECT * FROM "categories" WHERE ("categories"."url_name" = 'acoustic-guitars') LIMIT 1 
    Brand Load (0.6ms) SELECT * FROM "brands" WHERE ("brands"."id" = 14) 
    Product Load (4.8ms) SELECT * FROM "products" WHERE ((products.category_id = 3) AND (products.brand_id = 14)) ORDER BY products.price DESC LIMIT 6 OFFSET 0 
    SQL (0.2ms) SELECT count(*) AS count_all FROM "products" WHERE ((products.category_id = 3) AND (products.brand_id = 14)) 
    Rendering template within layouts/application 
    Rendering brands/show 

你可以看到,它的抓產品下降的價格。

在我的品牌#表明我做了以下內容:

<%- form_for [@category, @brand], :html => {:method => 'get', :id => 'sort_form', :class => 'sort_form'} do -%> 
      <label>Sort by: </label> <%= select_tag :order, product_sort_options %> 
      <%= submit_tag 'Go' %> 
     <%- end -%> 

的目標是,用戶可以通過幾個不同的選擇排序。

我也有這個在我的products_helper:「爲了= ascend_by_price」

def product_sort_options 
    options_for_select([ 
     ['', nil], 
     ['Newest to Oldest', 'descend_by_date'], 
     ['Oldest to Newest', 'ascend_by_date'], 
     ['Price: Highest to Lowest', 'descend_by_price'], 
     ['Price: Lowest to Highest', 'ascend_by_price'], 
     ['Name', 'ascend_by_name'] 
    ]) 
    end 

我遇到的問題是,如果我點擊下拉,做價格最低到最高重新加載頁面,用在網址的末尾,但產品的順序沒有變化。

任何幫助表示讚賞。

回答

0

您需要在呼叫中添加以包含:order參數的值。如果您正在執行類似Product.search(params[:search])(並且訂單參數必須位於params[:search][:order]),則它只會默認包含在搜索中。

所以,這樣的事情應該工作:

@search = Product.brand_id_equals(@brand.id) 
@search.category_id_equals(@category.id) 
@search.order(params[:order] || :descend_by_price) 

我已經拆出來,使其更易於閱讀。最後一行指定按順序參數的值排序,如果不可用,則按默認順序排序。

+0

我不得不稍微修改,但是這樣做了。 –

相關問題