前提・実現したいこと
Railsで服装の写真を投稿して、それらをカテゴリ別表示できるアプリを作成しています。
非同期でカテゴリを選択するとイベント発火して、そのカテゴリに紐づいたvalueと一致する服装をjson形式で引っ張ってきて表示させたいのですが、非同期通信は成功するのにjbuilderからjsファイルに返している値がundefinedになってしまいます。
発生している問題・エラーメッセージ
非同期通信は成功するのに、jbuilderからjsファイルに返している値がundefinedになってしまう
該当のソースコード
index.html.haml
Ruby
1.main 2 .main__upper 3 .main__upper__actions 4 .main__upper__actions__category 5 = form_with(url: search_outfits_path, local: true, method: :get, class: "search-form") do |form| 6 .form-group 7 = select_tag :mood, options_for_select(@moods.map{|o| [o.name, o.id, {class: 'mood-choice'}]}), {class: 'search-input', id: 'category-form'} 8
outfits.controller.rb
Ruby
1 def search 2 @outfits = Outfit.search(params[:keyword]) 3 respond_to do |format| 4 format.html 5 format.json 6 end 7 end 8
searches.js
JavaScript
1$(function() { 2 $(".search-input").on('change', function() { 3 let input = $(this).val(); 4 console.log(input); 5 $.ajax({ 6 type: 'GET', 7 url: '/outfits/search', 8 data: { keyword: input }, 9 dataType: 'json' 10 }) 11 .done(function(outfits) { 12 console.log('success!'); 13 console.log(outfits); 14 }) 15 .fail(function(){ 16 console.log('failure!'); 17 }) 18 }); 19});
search.json.jbuilder
jbuilder
1json.array! @outfits do |outfit| 2 json.id outfgtfit.id 3 json.name outfit.name 4 json.image outfit.image 5 json.user_id outfit.user_id 6 json.mood_id outfit.mood_id 7 json.user_sign_in current_user 8end 9
routes.rb
Ruby
1 2 resources :outfits do 3 collection do 4 get 'search' 5 end 6 end 7
outfit.rb
Ruby
1 def self.search(search) 2 if search != 1 3 Outfit.where(mood_id: search) 4 else 5 Outfit.where(user_id: current_user.id) 6 end 7 end 8end 9
試したこと
- 下記の流れをきちんと理解し、6つ全てのファイルの細かいミスを探した => 何も解決に繋がらず。
$(".search-input")の値が変わった時にイベント発火 --> ajax通信開始 --> json形式なので、コントローラ内のrespond_toで 必要なデータと共にjbuilderへ --> モデル&コントローラで定義した@outfitsを引数等使ってjbuilder内に運んでjson形式に変換 --> 変換されたものをconsole.logで(outfits)として表示したいがundefinedとなる
- コントローラの中身をモデルが関与しないように簡素化 => モデルは問題がないことがわかる
- jbuilderファイルの簡素化 => json.text "テキスト"まで簡略化してもundefinedだったので、jbuilderの書き方はおそらく正しいことがわかる
補足情報(FW/ツールのバージョンなど)
Ruby => 2.5.1
Rails => 5.2.4.1
jquery-rails => 4.3.5
jbuilder => 2.10.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。