Ruby 2 と Rails 4 を実行する Web アプリケーションと、非常に複雑なフォームがあります。私がやろうとしているのは、ネストされたフォームとチェーンされた選択を組み合わせることです。問題は、ネストされたリソースのフィールドがその場で作成され、日付と時刻の一意の組み合わせが与えられることですが、私の JavaScript では、どの選択が他のどの選択にチェーンされているかを定義する必要があります。
私のコンセプトに使用した 2 つのチュートリアルは次のとおりです 。http://homeonrails.blogspot.de/2012/01/rails-31-linked-dropdown-cascading.html モデルフォーム改訂
しかし、重要なコードは基本的に 3 つの異なるファイルにあります。
$(document).ready(function(){
$('select#device_name').chainedTo('select#room_name');
});
これは、1 つの選択を別の選択に連結し、フォーム テンプレートまたは field_partial でレンダリングできます。
ヘルパー メソッドは次のようになります。
def link_to_add_fields(name, f, association)
new_object = f.object.send(association).klass.new
id = new_object.object_id
fields = f.fields_for(association, new_object, child_index: id) do |builder|
render(association.to_s.singularize + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
end
そして最後になりましたが、コーヒー スクリプトは次のとおりです。
jQuery ->
$('form').on 'click', '.remove_fields', (event) ->
$(this).prev('input[type=hidden]').val('1')
$(this).closest('fieldset').hide()
event.preventDefault()
$('form').on 'click', '.add_fields', (event) ->
time = new Date().getTime()
regexp = new RegExp($(this).data('id'), 'g')
$(this).before($(this).data('fields').replace(regexp, time))
event.preventDefault()
したがって、これがどのように機能するかについての私の理解は、ボタンをクリックすると、ヘルパー メソッドが新しい関連付けを作成し、ID を取得し、パーシャルから html をレンダリングし、コーヒー スクリプトがオブジェクトの ID を現在の日時に置き換えるだけです。そのため、同じ ID を持たなくても複数の関連付けを追加できます。
問題は、チェインされた関数の JavaScript を変更して、選択ボックスの ID を取得する方法です。現在、コフェスクリプトから日時を受け入れる動的な JavaScript を作成する方法や、それらをJavaScriptで検索し、自分自身を変更します。
ヘルプやヒントをいただければ幸いです。