0

ですから、私はこの間、さまざまな形でこれを機能させてきましたが、すべてが一緒に機能することはありませんでした。

参考までに、適切な関係が機能しているカテゴリ/ブランド/製品があります。サイトはhttp://emeraldcityguitars.comで、実際の動作を確認できます。

だから私のブランドではコントローラーショーアクション:

    @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

あなたはそのつかむ製品が価格によって下がっているのを見ることができます。

私のBrand#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にもこれがあります:

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の最後に「?order = ascend_by_price」が付いたページが再読み込みされますが、製品の順序に変更はありません。

どんな助けでも大歓迎です。

4

1 に答える 1

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)

読みやすくするために分割しました。最後の行は、orderパラメーターの値、またはそれが利用できない場合はデフォルトの順序で順序付けすることを指定します。

于 2011-11-14T23:16:20.337 に答える