質問編集履歴
2
タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
入力画面で別モデルからデータを参照、表示
|
1
|
+
入力画面で別モデルからデータを参照、表示したい
|
body
CHANGED
File without changes
|
1
記述忘れ
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
入力画面で別モデルから
|
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
|
-
|
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><
|
103
|
+
<td><%= orderdetail.text_field 'code_no' %></td>
|
93
|
-
<td>
|
104
|
+
<td><div id="part_number"></div></td><!--品番を表示したい-->
|
94
|
-
<td>
|
105
|
+
<td><div id="product_name"></div></td><!--品名を表示したい-->
|
95
106
|
<td><%= orderdetail.text_field 'quantity' %></td>
|
96
|
-
<td>
|
107
|
+
<td><div id="shipping_unit"></div></td><!--出荷単位を表示したい-->
|
97
|
-
<td>
|
108
|
+
<td><div id="price"></div></td><!--販売価格を表示したい-->
|
98
|
-
<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
|
-
|
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 =
|
123
|
+
@count = 2
|
128
124
|
|
129
125
|
#入力欄の表示
|
130
126
|
@count.times { @order.orderdetails.build }
|
131
127
|
end
|
132
|
-
|
128
|
+
|
133
|
-
|
129
|
+
|
134
|
-
|
130
|
+
#app/controllers/orderdetails_controller.rb
|
135
|
-
|
131
|
+
def new
|
136
|
-
|
132
|
+
@orderdetail = Orderdetail.new
|
137
|
-
|
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
|
```
|