質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

718閲覧

コード番号を入力してデータベースから値を参照して表示させたい

begenner

総合スコア79

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/01/13 11:31

編集2022/01/12 10:55

現在ECサイトを作成しています。
注文画面で商品のコード番号を入力すると商品の情報が表示され注文できるようにしたいです。
サンプルで作成したRailsアプリケーションではうまくいっていましたが、新しく作成して同じような動作をしたいのですのですが、javascriptでの検索がうまくいきません。
できるだけコードを変更せずにやっていきたいと思っています。
わかる方がいらっしゃればよろしくお願いします。
###エラー詳細(terminalのログ画像)イメージ説明
イメージ説明
###期待する動作

  • データベースにコード番号をpostして情報を取得、取得した値をフォームのテキストボックスに表示する

###問題点

  • データベースにコード番号をpostして情報をテキストボックスに表示できない(モデル検索がうまくいっていないことが原因だと思います)

###実現したいこと
コード番号を入力するとそれに基づいたデータを参照して表示させたい。

###サンプルアプリケーション作成で参考にしたサイト
Railsでajaxを用いた簡単なインクリメンタルサーチを実装する

###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5

##補足情報(変更点、エラー原因になりえている要素)
サンプルと新規作成したアプリケーションのおおきな違いとしては

  • 商品モデルの名前を変更(ユーザーレベルごとに商品単価が違うため複数作成するため)
  • サンプルの商品モデルは product、新規アプリケーションは product_rank0 となっている
  • 商品モデルのカラム名が変更されている(基本的に内容は同じ)

###うまくいっていないコード(必要だと思われる内容だけ)
データベース登録内容(商品モデル、少し余分な内容も含まれています(エラー原因の可能性要素1))
イメージ説明

schema.rb

ruby

1ActiveRecord::Schema.define(version: 20180112101528) do 2#注文明細テーブル 3 create_table "orderdetails", force: :cascade do |t| 4 t.integer "order_id", limit: 4 #注文テーブルのid 5 t.integer "code_no", limit: 4 #コード番号 6 t.string "product_name", limit: 255#商品名 7 t.integer "quantity", limit: 4 #数量 8 t.float "price", limit: 24 #価格 9 t.string "unit", limit: 255 #単位 10 t.integer "sub_total", limit: 4 #小計 11 end 12 13#注文テーブル 14 create_table "orders", force: :cascade do |t| 15 t.string "order_no", limit: 255 16 t.integer "user_id", limit: 4 17 t.datetime "created_at", null: false 18 t.datetime "updated_at", null: false 19 end 20 21#商品テーブル 22 create_table "product_rank0s", force: :cascade do |t| 23 t.string "code_no", limit: 255 #コード番号 24 t.string "product_name", limit: 255 #商品名 25 t.string "unit", limit: 255 #単位 26 t.float "s_price1", limit: 24 #販売価格 27 end

config/routes.rb

ruby

1Rails.application.routes.draw do 2 3 resources :orders do 4 collection do 5 get 'search_product' 6 end 7 end 8 9 resources :orderdetails 10 root to: 'tops#index' 11end

app/controllers/orders_controllers.rb(エラー原因の可能性要素2)

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 end 9. 10. 11 # jsonでデータを取得する 12 def search_product 13 14 @product = Product_rank0.where('code_no LIKE(?)', "#{params[:keyword]}") 15 render json: @product 16     #試した内容1 17 # @product = Product_rank0.find_by(code_no: "#{params[:keyword]}") 18 # render json: @product 19 end 20. 21. 22end

app/assets/javascript/orders.js(エラー原因の可能性要素3)

javascript

1$(document).on('turbolinks:load', function(){ 2 $('#order_orderdetails_attributes_0_code_no').change(function () { 3 var input = ($(this).val()); 4 $.ajax({ 5 url: '/orders/search_product', 6 type: 'GET', 7 data: ('keyword=' + input), 8 processData: false, 9 contentType: false, 10 dataType: 'json' 11 }) 12 .done(function(data){ 13 $(data).each(function(i, product){ 14 $('#order_orderdetails_attributes_0_part_number').val(product.part_number) 15$("#order_orderdetails_attributes_0_product_name").val(product.product_name) 16$("#order_orderdetails_attributes_0_unit").val(product.unit) $("#order_orderdetails_attributes_0_price").val(product.selling_price1) 17 }); 18 }); 19 }); 20// 2番目の入力項目 21. 22. 23});

app/views/orders/new.html.erb

ruby

1<%= form_for (@order), html:{id: 'form'} do |f|%> 2 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" %>&times;<%= orderdetail.text_field 'unit', :size => "1", disabled: 'disabled' %></td> 8 <td><%= orderdetail.text_field 'price', :size => "7", disabled: 'disabled' %></td> 9 <td><%= orderdetail.text_field 'subtotal', :size => "7", disabled: 'disabled' %></td> 10 </tr> 11 <% end %> 12 <%= f.hidden_field :user_id, value: current_user.id %> 13</table> 14 <br /> 15 <div class="actions"> 16 <%= f.submit %> 17 </div> 18 <% end %> 19

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teng

2018/01/13 13:08 編集

> javascriptでの検索がうまくいきません とありますが、どう動けば「うまくいった」なのかよくわかりません。想定する動作と現状どういう風に動かないのかを教えてください。また、> 下記のエラーが表示されます とありますが、「エラーが起きてますよ」っていう表示なので、エラー内容がわかりません。全部のコードを読んで間違いを探すのは大変すぎて誰もやってくれないと思うので、エラー内容(ログの画面に英語でずらずらでてくるやつです)を載せてくれればと思います。
begenner

2018/01/13 13:33

ご連絡いただきありがとうございます。情報を修正しましたがこのような形でよろしいでしょうか?
guest

回答1

0

質問の修正ありがとうございます。
エラーに
Unable to autoload constant Product_rank0, expected ......../models/product_rank0.rb to define it
とあります。
models/product_rank0.rbに書いてあるはずのProduct_rank0モデルが定義されてないぞ、って怒られてます。
モデルをproductからproduct_rank0に変更したようですが、models/product.rbのファイル名、ファイル内のクラス定義はproduct_rank0.rb, Product_rank0にそれぞれ変更されていますでしょうか?
確認してそれでも動かなければコメントください!

投稿2018/01/13 13:41

teng

総合スコア127

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

begenner

2018/01/13 14:06

ご連絡いただきありがとうございます。 念のためモデルを rails g model Product_userrank0 で新規作成し rake db:migrate を実行、controllerも 検索モデルをProduct_userrank0 と変更し確認してみましたが、 terminalで同じエラー内容が発生します。何が原因と考えられますでしょうか? お手数ですがよろしくお願いいたします。
teng

2018/01/13 14:14

そうですか... 試しにterminalでrails cを起動して、Product_userrank0.new とやってみてもらえますか?
begenner

2018/01/13 14:23

教えていただいた通りに実行すると同じエラーログとそれに関連する膨大なエラーログが発生しました。 他のマイグレーションファイルをコマンドで削除などできなかった場合に強制削除した覚えもありますがそれも影響している可能性はありますか?
teng

2018/01/13 15:01

1. app/modelsにproduct_userrank0.rbが存在する 2. 1にclass Product_userrank0 < ActiveRecord::Baseが定義されている 3. DBにproduct_userrank0sテーブルが存在する を再度ご確認ください。それで動かなければぱっとはわからないです。場合によっては新規プロジェクトでキレイに作り直したほうがうまくいくかもしれません。お力になれず申し訳ないです...
begenner

2018/01/13 15:06

ご指摘いただいた内容はすべて確認が取れました。 ご丁寧にご対応いただきありがとうございました(^^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問