##やりたいこと
商品や投稿一覧画面で並び替え機能を実装する際に、ajax通信を使って非同期で並び替えをしたい。
例えば下記のようにDBに商品を表すproductsテーブルがあったとします。
id | name | price | created_at |
---|---|---|---|
1 | banana | 200 | 2020-05-05 |
2 | apple | 300 | 2020-05-06 |
id | orange | 100 | 2020-05-04 |
*created_atは商品が追加された日(発売日)として扱うとします。
##実装していること
コントローラーで、下記のようにパラメーターを設定し、そのデータを受け取った際に表示している画面を並び替える仕組みにしたいです。
products_controller.rb
ruby
1def index 2 @products = Product.all.order(params[:sort])
viewは下記のようになっております。
haml
1%select#products-list.products-list 2 %option{value: "price ASC"} 価格安い順 3 %option{value: "price DESC"} 価格高い順 4 %option{value: "created_at ASC"} 発売順 5 ... 6.products-content 7 - @products.each do |p| 8 = p.name 9 = p.price 10 11... 12 13
###やりたいこと
上記の%selectでリストを作成し、そのIDを取得してvalueをajax通信で走らせてcontrollerのparamsに当てはめるということができないかなと考えております。
jsファイルは現在下記のように記載しています。
js
1$(function(){ 2 $("#products-list").change(function(){ 3 const sortTh = $("#products-list").val(); 4 $.ajax({ 5 url: '/products/index', 6 type: 'GET', 7 data: { sort: sortTh}, 8 dataType: 'json' 9 }) 10 11 .done(function(){ 12 }) 13 14 .fail(function(){ 15 alert('通信に失敗しました') 16 }); 17 }); 18});
上記でajaxの書き方に指摘等あればアドバイスいただけますと幸いです。
また、doneの内容はどのような記述をするのかなどご教授いただけましたら幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。