###実現したいこと
fields_forヘルパーで割り当てられた xxx_attributes_0_xxx、 xxx_attributes_1_xxx、...に対するjsの処理を簡略化したいです。
(現在はxxx_attributes_x_xxxのidに対して一つ一つjsの処理を割り当てています。)
わかる方がいらっしゃればご助力お願いいたします(m_ _m)
###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
###試したこと
<%= f.fields_for :orderdetails do | orderdetail | %>の | orderdetail | に倣ってjsのchangeイベントのidに対して
$('#order_orderdetails_attributes_' + i +'code_no').change
$('#order_orderdetails_attributes' + orderdetail.index +'_code_no').change
などと割り当てましたが、動作しませんでした。
###該当のソースコード
app/views/orders/new.html.erb
ruby
1. 2. 3 4 <%= form_for (@order) do |f|%> 5 <%= f.fields_for :orderdetails do | orderdetail | %> 6 <tr> 7 <td><%= orderdetail.text_field 'code_no', :size => "5"%></td> 8 <td><%= orderdetail.text_field 'part_number', disabled: 'disabled' %></td> 9 </tr> 10 <% end %> 11 <% end %> 12. 13. 14
app/assets/javascripts/orders.js
javascript
1$(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 //この0の部分を動的に割り当てたい↑↑↑↑ 16 }); 17 }); 18 });
app/controllers/orders_controller.rb
ruby
1class OrdersController < ApplicationController 2. 3. 4 def new 5 @order = Order.new 6 #入力欄の表示を複数作成(10項目) 7 (1..10).each do |num| 8 @order.orderdetails.build 9 end 10 end 11. 12. 13 def search_product 14 @product = Product.where('code_no LIKE(?)', "#{params[:keyword]}") 15 render json: @product 16 end 17. 18.
あなたの回答
tips
プレビュー