質問編集履歴

1

コードを追記しました

2017/12/16 14:27

投稿

begenner
begenner

スコア79

test CHANGED
@@ -1 +1 @@
1
- idを取得、ワイルドカード指定したいけど分からない
1
+ fields_forにより生成される連idを取得、ワイルドカード指定したいけど分からない
test CHANGED
@@ -1,8 +1,8 @@
1
1
  ###実現したいこと
2
2
 
3
- id の中央に位置する連番に対して番号を取得、ワイルドカードを指定したいです。
3
+ id の中央に位置する連番に対して番号を取得、ワイルドカードを指定してjsのコード量を少なくしたいです。
4
4
 
5
- 分かる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m_ _m)
5
+ ご教授いただきますようよろしくお願いいたします(m_ _m)
6
6
 
7
7
 
8
8
 
@@ -20,9 +20,17 @@
20
20
 
21
21
  ###問題点
22
22
 
23
+ 上記のサイトを参考にjqueryのワイルドカードを利用してモデルからjsonでデータを参照したいのですが
24
+
23
- Railsのform_forとf.fields_forを使用していのですがfields_forメソッドによりidの連番の位置が
25
+ Railsのform_forとf.fields_forを使用fields_forメソッドによりidの数字の連番の位置が
24
26
 
25
27
 
28
+
29
+ <親モデル(単数系)>_<子モデル(単数系)>_atributes_0_<子モデルのカラム名>
30
+
31
+ となってしまいワイルドカードが使えるかわからない
32
+
33
+ 例)
26
34
 
27
35
  xxx_atributes_0_yyy
28
36
 
@@ -34,6 +42,20 @@
34
42
 
35
43
 
36
44
 
45
+
46
+
47
+ ###試したこと
48
+
49
+
50
+
51
+ [ruby の eachメソッドでループ回数が必要な場合 (for文のiのような)](http://useless.hatenablog.com/entry/2016/07/11/190000)
52
+
53
+
54
+
55
+ のサイトのように fields_forのyyyに対してブロックの中で s を連番として当てられないかと試しましたができませんでした。
56
+
57
+
58
+
37
59
  ###動作環境
38
60
 
39
61
  OS:mac
@@ -42,18 +64,114 @@
42
64
 
43
65
  Ruby on Rails: 4.2.5
44
66
 
67
+ ##コード
68
+
69
+ view部分
70
+
71
+ ```ruby
72
+
73
+ <%= form_for (@xxx) do |f|%>
74
+
75
+ <%= f.fields_for :yyy do | yyy, s | %>
76
+
77
+ .           <%= yyy.text_field 'code_no' %>
78
+
79
+ .           <%= yyy.text_field 'part_number' %>
80
+
81
+ <% end %>
82
+
83
+  <div class="actions">
84
+
85
+ <%= f.submit @submit %>
86
+
87
+ </div>
88
+
89
+ <% end %>
90
+
91
+ ```
92
+
93
+ js部分(jquery混同しています)
94
+
95
+ ```javascript
96
+
97
+ $('#xxx_yyy_attributes_' + s + '_code_no').change(function () {
98
+
99
+ var input = ($(this).val());
100
+
101
+ $.ajax({
102
+
103
+ url: '/xxxes/search_product',
104
+
105
+ type: 'GET',
106
+
107
+ data: ('keyword=' + input),
108
+
109
+ processData: false,
110
+
111
+ contentType: false,
112
+
113
+ dataType: 'json'
114
+
115
+ })
116
+
117
+ .done(function(data){
118
+
119
+ $(data).each(function(i, product){
120
+
121
+ $("#xxx_yyy_attributes_" + s + "_part_number").val(product.part_number)
122
+
123
+ });
124
+
125
+ });
126
+
127
+ });
128
+
129
+ ```
130
+
131
+ controller部分
132
+
133
+ ```ruby
134
+
135
+ class XxxesController < ApplicationController
45
136
 
46
137
 
47
- ```Javascript
48
138
 
139
+ # GET /xxxes/new
140
+
141
+ def new
142
+
143
+ @xxx = Xxx.new
144
+
145
+
146
+
147
+ (1..10).each do |num|
148
+
149
+ @xxx.yyy.build
150
+
151
+ end
152
+
153
+ end
154
+
155
+
156
+
157
+ # jsonでデータを取得する
158
+
159
+ def search_product
160
+
49
- $('#xxx_attributes_0_yyy').change(function () {
161
+ @product = Product.where('code_no LIKE(?)', "#{params[:keyword]}")
162
+
163
+ render json: @product
164
+
165
+ end
50
166
 
51
167
  .
52
168
 
53
169
  .
54
170
 
55
- .
56
171
 
172
+
57
- }
173
+ end
174
+
175
+
58
176
 
59
177
  ```