2011-11-14 2 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 

私が午前問題は、私は、ドロップダウンをクリックして、最高に最低価格をすれば、それはで、ページをリロードすることですURLの最後には製品の順序に変更はありません。

ご了承ください。

答えて

0

:orderパラメータの値を含む呼び出しを追加する必要があります。 Product.search(params[:search])のようなものを実行している場合は、デフォルトで検索にのみ含まれます(orderパラメータはparams[:search][:order]にある必要があります)。

ので、このような何か作業をする必要があります:私は、読みやすくするために、それを分割しました

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

。最後の行は、注文パラメータの値で注文するか、デフォルトの注文が利用できない場合はそれを指定します。

+0

少し修正する必要がありましたが、これがありました。 –

関連する問題