0

動的データをフォームのセクションにロードするために AJAX のみが使用するテンプレートにフォーム変数を渡すにはどうすればよいですか?

レッスンに属しているコース フォームがあり、レッスンには多くの採点可能なアイテムがあります。レッスン選択入力が変更された場合...選択したレッスンを反映するために、gradable_items のネストされたフィールドを更新する必要があります。

  jQuery ->
    l = $("#course_lesson_id")
    l.on "change", ->
      $("#gradable_items_container").load("gradable_items_inputs?lesson=#{l.val()}")

上記のスクリプトは機能します。gradable_items_inputs.html.erb のコードをターゲット div にロードします。

gradable_items_inputs.html.erb

GradedItem は、各 GradableItem の成績が格納されるモデルです。GradedItem は :gradable_item に属し、レッスンに属します。

  <%= f.simple_fields_for :graded_items do |graded_item| %>
    <%= gradable_item.name %>
    <%= graded_item.input :gradable_item_id, input_html: { value: gradable_item.id } %>
  <% end %>

上記のコードをgradable_items_inputs.html.erbファイルに入れると、「未定義のローカル変数 "f"」エラーが発生します。f.simple_fields_for 呼び出しを AJAX テンプレート ファイルの外に移動しようとしましたが、同じエラーが発生しましたが、graded_item 変数に対してです。いずれにせよ、そのフォーム変数を JavaScript 経由でテンプレートに渡す必要があります。

これは私のコードがどのように見えるかの概要です:

parent form do |f|
   f.association :lesson

  nested_form do |n|
    // the fields that go here are dependent on the lesson that is chosen above.  A model called  LessonGradableItem is a join model that holds what items a particular lesson should be graded against.  I generate an input for each item...then save the result in the GradedItem model.
    // since these inputs are loaded via AJAX from an external template, the form is being broken...how can I pass the n form variable to that file?
  end  

end

フォーム変数をデータ パラメータと URL パラメータとして渡そうとしましたが、gradable_items_inputs.html.erb ファイルで文字列として解釈されます。

4

1 に答える 1

0

フォーム変数を渡さないでください。ネストされたフォームを個別に構築します。したがって、アクションで新しい Object.new を作成して、ネストされたフォーム (私の場合と同様のケース) が親フォーム オブジェクトを知る必要がないようにします。これを機能させるには、入力に正しい構造が与えられるように、id: と name: も設定する必要がありました。

于 2013-10-27T18:40:48.227 に答える