現在ECサイトを作成しています。
注文画面で商品のコード番号を入力すると
- データベースをコード番号をpostして情報を取得
- 取得した値をフォームのテキストボックスに表示させたい
のですがうまくいきません。
わかる方がいらっしゃればよろしくお願いします。
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
MySQL: 5.7.18
###期待する動作
- データベースにコード番号をpostして情報を取得、取得した値をフォームのテキストボックスに表示させたい
###エラー詳細(terminalのログ画像)
###問題点
- データベースにコード番号をpostして情報をテキストボックスに表示できない
###参考にしたサイト
Railsでajaxを用いた簡単なインクリメンタルサーチを実装する
###該当のソースコード
db/schema.rb
ruby
1#注文明細テーブル 2 create_table "orderdetails", force: :cascade do |t| 3 t.integer "order_id", limit: 4 4 t.integer "code_no", limit: 4#商品コード 5 t.string "product_name", limit: 255#商品名 6 t.integer "quantity", limit: 4#数量 7 t.float "price", limit: 24#価格 8 t.string "unit", limit: 255#単位 9 end 10#注文テーブル 11 create_table "orders", force: :cascade do |t| 12 t.string "order_no", limit: 255 13 t.integer "user_id", limit: 4 14 end 15#商品テーブル 16 create_table "productuserrank0s", force: :cascade do |t| 17 t.integer "code_no", limit: 4#商品コード 18 t.string "product_name", limit: 255#商品名 19 t.string "unit", limit: 255#単位 20 t.integer "standard_price", limit: 4#価格 21 end
config/routes.rb
ruby
1Rails.application.routes.draw do 2 resources :orders do 3 get 'search_product' 4 end 5 6 resources :productuserrank0s 7 8 root to: 'tops#index' 9end 10
リレーション
ruby
1#app/models/order.rb 2class Order < ActiveRecord::Base 3 belongs_to :user 4 has_many :orderdetails 5 accepts_nested_attributes_for :orderdetails, reject_if: lambda {|attributes| attributes['code_no'].blank?} 6end 7#app/models/orderdetail.rb 8class Orderdetail < ActiveRecord::Base 9 belongs_to :order 10end
app/controllers/orders_controller.rb
ruby
1class OrdersController < ApplicationController 2 def new 3 @order = Order.new 4 5 (1..10).each do |num| 6 @order.orderdetails.build 7 end 8 @submit = "注文する" 9 end 10. 11. 12 def search_product 13 @product = Productuserrank0.where('code_no LIKE(?)', "#{params[:keyword]}") 14 render json: @product 15 end 16. 17. 18end 19
app/views/orders/new.html.erb
ruby
1<%= form_for (@order), html:{id: 'form'} do |f|%> 2 <p>注文内容</p> 3 <%= f.fields_for :orderdetails do |orderdetail, s | %> 4 <tr> 5 <td><%= orderdetail.text_field 'code_no', :size => "5"%></td> 6 <td><%= orderdetail.text_field 'product_name', disabled: 'disabled' %></td> 7 <td><%= orderdetail.text_field 'quantity', :size => "3" %></td> 8 <td><%= orderdetail.text_field 'price', :size => "7", disabled: 'disabled' %></td> 9 <td><%= orderdetail.text_field 'sub_total', :size => "7", disabled: 'disabled' %></td> 10 </tr> 11 <% end %> 12 <%= f.hidden_field :user_id, value: current_user.id %> 13 <br /> 14 <div class="actions"> 15 <%= f.submit %> 16 </div> 17<% end %>
app/assets/javascript/orders.js
ruby
1// 1番目の入力項目 2 //(コードNo) 3 $(document).on('turbolinks:load', function(){ 4// var strId = 0; 5 $('#order_orderdetails_attributes_0_code_no').change(function () { 6 var input = ($(this).val()); 7 $.ajax({ 8 url: '/orders/search_product', 9 type: 'GET', 10 data: ('keyword=' + input), 11 processData: false, 12 contentType: false, 13 dataType: 'json' 14 }) 15 .done(function(data){ 16 $(data).each(function(i, product){ 17$("#order_orderdetails_attributes_0_product_name").val(product.product_name) 18$("#order_orderdetails_attributes_0_unit").val(product.unit) 19$("#order_orderdetails_attributes_0_price").val(product.selling_price1) 20 }); 21 }); 22 }); 23 24 25});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 06:07
2018/01/15 06:16