実現したいこと
会社名を選択すると、その会社名に紐づく住所を自動で入力する。
まずは通信の確認をしたい。
該当のコード
用語
DismantlingLedger(台帳)
dismantling_ledgersテーブル
- orderer : string 発注者
- invoice_destination_address : string 発注者の住所
Client(会社)
clientsテーブル
- company_name : string 会社名
- address : string 住所
view側
Haml
1= f.text_field :orderer, list: 'company_name' ##会社を選択 2%datalist#company_name 3 - Client.all.each do |client| 4 %option{value: client.company_name} 5= f.text_field :invoice_destination_address ## 選択された会社に紐づく住所をここに自動で入力したい 6
JavaScript
1 // 発注者名が入力されたら[請求書送付先住所]に発注者の住所を入力する 2 $('input[name="dismantling_ledger[orderer]"]').change(function () { // 発注者名のフォームに変更があったら 3 var input = $('input[name="dismantling_ledger[orderer]"]').val(); // フォームの値を'input'という変数に代入する 4 $.ajax({ 5 type: 'GET', //リクエストのタイプはGET 6 url: "/dismantling_ledgers/get_address", // URLは"/dismantling_ledger/get_address"を指定 7 data: {order_client: input}, // コントローラーへフォームの値をorder_clientとして送信する params[:order_client] 8 dataType: 'json' 9 }) 10 .done(function (address) { 11 console.log(address) // 成功したらログに取得した住所を出す 12 }) 13 .fail(function () { 14 console.log('失敗したよ') // 失敗したらログに'失敗したよ'と出す 15 }) 16 }) 17
ルーティング
Ruby
1#routes.rb 2Rails.application.routes.draw do 3... 4 get 'dismantling_ledgers/get_address' 5... 6end
コントローラー
Ruby
1# dismantling_ledgers_controller 2 def get_address 3 client = Client.find_by(company_name: params[:order_client]) 4 @address = client.address 5 end 6
エラー内容
ActiveRecord::RecordNotFound in DismantlingLedgersController#show Couldn't find DismantlingLedger with 'id'=get_address Extracted source (around line #177):
Request parameters {"order_client"=>"株式会社ほげほげ", "id"=>"get_address"}
試したこと 原因予想
ルーティングの書き方が間違っているので、リクエストが"id"=>"get_address"となっていると考えていますが、今回の場合どのように書いたら良いのかわかりません。
なぜshowが呼ばれているのかもわからず、詰まっています…
追記
json
1#get_address.json.jbuilder 2json.address @address # { "address": @address }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/30 02:51
2020/07/30 02:58