teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

タイトルの変更

2017/11/27 04:50

投稿

begenner
begenner

スコア80

title CHANGED
@@ -1,1 +1,1 @@
1
- 入力画面で別モデルからデータを参照、表示
1
+ 入力画面で別モデルからデータを参照、表示したい
body CHANGED
File without changes

1

記述忘れ

2017/11/27 04:50

投稿

begenner
begenner

スコア80

title CHANGED
@@ -1,1 +1,1 @@
1
- 入力画面で別モデルからajaxでデータを参照、表示
1
+ 入力画面で別モデルからデータを参照、表示
body CHANGED
@@ -1,25 +1,24 @@
1
1
  ###実現したいこと
2
2
  現在 ruby、Ruby on Rails で ECサイトを作成しています。
3
3
  注文画面から 商品コード と 数量 を必要な分だけ入力すれば注文できるシステムを作成したいです。
4
+ 具体的には注文フォームで商品コードテキストフィールドのフォーカスが外れると商品モデルから該当する商品コードのデータの内容を表示させたいです。
4
5
 
5
6
  ###問題点
6
- 商品コードを入力しフォーカスがると商品モルから該当する商品コドのデーの内容を表示させる方法のイメージがわきません。
7
+ 0. 商品コードを入力しフォーカスがはずても各項目にデータ表示されない
7
- (またできればcreateアクション時に注文明細テーブルにschema.rbに記載されているカラム項目を保存するためのnew.html.erbの変更点を教えていただけると大変助かります。)
8
8
  ご助力いただきますようお願いいたします。
9
9
  ###補足
10
- 注文画面から商品を一度で注文をできるようにするために、下記サイト9章(複雑なフォームの構築)を参考にしてベースを作成してい
10
+ 下記サイトを参考にースを作成しました
11
11
  http://ruby.studio-kingdom.com/rails/guides/form_helpers#building_complex_forms
12
12
 
13
+ https://doruby.jp/users/maya/entries/_Rails_Rails_Ajax_Ajax_
14
+
13
15
  ###開発環境
14
16
  OS:mac
15
17
  Ruby:2.3.5
16
18
  Rails:4.2.5
17
19
 
18
- ###試したこと
19
- 「rails db 別モデル表示」などの条件で調べましたが、該当するものが見つかりませんでした。
20
-
21
20
  ###ソースコード
22
- モデル
21
+ model
23
22
  ```ruby
24
23
  #app/models/orderdetail.rb
25
24
  class Orderdetail < ActiveRecord::Base
@@ -29,12 +28,25 @@
29
28
 
30
29
  #app/models/order.rb
31
30
  class Order < ActiveRecord::Base
32
- belongs_to :user
33
31
  has_many :orderdetails
34
32
  accepts_nested_attributes_for :orderdetails
35
33
  end
36
34
 
35
+ #app/models/product.rb
36
+ class Product < ActiveRecord::Base
37
+ has_many :orderdetail
38
+ end
37
39
  ```
40
+ app/config/routes.rb
41
+ ```ruby
42
+ resources :orders
43
+ resources :orderdetails do
44
+ post 'search_product', on: :collection
45
+ end
46
+ end
47
+ resources :products
48
+ ```
49
+
38
50
  schema.rb
39
51
  ```ruby
40
52
  #注文テーブル
@@ -68,7 +80,7 @@
68
80
  end
69
81
  ```
70
82
 
71
- app/views/orders/new.html.erb
83
+ View(app/views/orders/new.html.erb)
72
84
  ```ruby
73
85
  注文内容
74
86
  <table border="1">
@@ -88,51 +100,60 @@
88
100
  <%= form_for @order do |f|%>
89
101
  <%= f.fields_for :orderdetails do |orderdetail| %>
90
102
  <tr>
91
-
92
- <td><div id=""><%= orderdetail.text_field 'code_no' %></div></td>
103
+ <td><%= orderdetail.text_field 'code_no' %></td>
93
- <td>品番を表示<div id="part_number"></div></td>
104
+ <td><div id="part_number"></div></td><!--品番を表示したい-->
94
- <td>品名を表示<div id="product_name"></div></td>
105
+ <td><div id="product_name"></div></td><!--品名を表示したい-->
95
106
  <td><%= orderdetail.text_field 'quantity' %></td>
96
- <td>出荷単位<div id="shipping_unit"></div></td>
107
+ <td><div id="shipping_unit"></div></td><!--出荷単位を表示したい-->
97
- <td>販売価格<div id="price"></div></td>
108
+ <td><div id="price"></div></td><!--販売価格を表示したい-->
98
- <td>金額</td>
109
+ <td><div id="total_price"></div></td><!--金額を表示したい-->
99
110
  </tr>
100
111
  <% end %>
101
112
  <% end %>
102
- <tr>
103
- <td colspan="5"></td>
104
- <td>小計</td>
105
- <td></td>
106
- </tr>
107
- <tr>
108
- <td colspan="5"></td>
109
- <td>送料</td>
110
- <td></td>
111
- </tr>
112
- <tr>
113
- <td colspan="5"></td>
114
- <td>合計</td>
115
- <td></td>
116
- </tr>
117
113
  </tbody>
118
114
  </table>
119
115
  ```
120
-
121
- app/controllers/orders_controller.rb
116
+ controller
122
117
  ```ruby
118
+ #app/controllers/orders_controller.rb
123
119
  def new
124
120
  @order = Order.new
125
121
 
126
122
  #カートの入力欄表示初期値
127
- @count = 5
123
+ @count = 2
128
124
 
129
125
  #入力欄の表示
130
126
  @count.times { @order.orderdetails.build }
131
127
  end
132
- .
128
+
133
- .
129
+
134
- private
130
+ #app/controllers/orderdetails_controller.rb
135
- def order_params
131
+ def new
136
- params.require(:order).permit(:user_id)
132
+ @orderdetail = Orderdetail.new
137
- end
133
+ end
134
+
135
+ def search_product
136
+ @product = Product.find_by(code_no: params[:code_no])
137
+
138
+ render layout: false
139
+ end
140
+
141
+ ```
142
+
143
+ app/views/orderdetails/search_product.coffee
144
+
145
+ ```ruby
146
+ $('#part_number’).text(‘<%= @product.part_number %>') #品番
147
+ $('#product_name’).text(‘<%= @product.product_name %>') #品名
148
+ $('#shipping_unit’).text(‘<%= @product.shipping_unit %>') #出荷単位
149
+ $('#price_1’).text(‘<%= @product.selling_price1 %>') #販売価格
150
+ ```
151
+ app/assets/javascripts/orderdetails.coffee
152
+ ```ruby
153
+ $ ->
154
+ # テキストボックスからフォーカスが外れたらフォームをsubmit
155
+ $('#code_no').change( ->
156
+ $product_id.val($(this).val()) # 選択された商品のIDをパラメータとして渡す
157
+ $product_id.closest('form').submit()
158
+ )
138
159
  ```