###問題点
jQueryでclassやidをワイルドカード指定
上記のサイトを参考にjqueryのワイルドカードを利用してモデルからjsonでデータを参照したいのですが
Railsのform_forとf.fields_forを使用するとfields_forメソッドによりidの数字の連番の位置が
<親モデル(単数系)>_<子モデル(単数系)>atributes_0<子モデルのカラム名>
となってしまいワイルドカードが利用できない
例)
xxx_yyy_atributes_0_yyy(のカラム名)
xxx_yyy_atributes_1_yyy(のカラム名)
xxx_yyy_atributes_2_yyy(のカラム名)
. ↑ここにきてしまう仕様になっている
###実現したいこと
jquery(または javascript)のワイルドカードを利用してモデルからjsonでデータを参照したい
または
idの数字の連番が
xxx_yyy_atributes_yyy(のカラム名)_0
xxx_yyy_atributes_yyy(のカラム名)_1
xxx_yyy_atributes_yyy(のカラム名)_2
のようなid名に変更したいです。実現する方法はありますでしょうか?
可能でしたらご教授いただきますようよろしくお願いいたします(m_ _m)
###試したこと
ruby の eachメソッドでループ回数が必要な場合 (for文のiのような)
のサイトのように fields_forのyyyに対してブロックの中で s を連番として当てられないかと試しましたができませんでした。
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
##コード
view部分
ruby
1<%= form_for (@xxx) do |f|%> 2 <%= f.fields_for :yyy do | yyy, s | %> 3. <%= yyy.text_field 'code_no' %> 4. <%= yyy.text_field 'part_number' %> 5 <% end %> 6 <div class="actions"> 7 <%= f.submit @submit %> 8 </div> 9<% end %>
js部分(jquery混同しています)
javascript
1 $('#xxx_yyy_attributes_' + s + '_code_no').change(function () { 2 var input = ($(this).val()); 3 $.ajax({ 4 url: '/xxxes/search_product', 5 type: 'GET', 6 data: ('keyword=' + input), 7 processData: false, 8 contentType: false, 9 dataType: 'json' 10 }) 11 .done(function(data){ 12 $(data).each(function(i, product){ 13 $("#xxx_yyy_attributes_" + s + "_part_number").val(product.part_number) 14 }); 15 }); 16 });
controller部分
ruby
1class XxxesController < ApplicationController 2 3 # GET /xxxes/new 4 def new 5 @xxx = Xxx.new 6 7 (1..10).each do |num| 8 @xxx.yyy.build 9 end 10 end 11 12 # jsonでデータを取得する 13 def search_product 14 @product = Product.where('code_no LIKE(?)', "#{params[:keyword]}") 15 render json: @product 16 end 17. 18. 19 20end 21
あなたの回答
tips
プレビュー