使用AJAX更新依赖表单内容...传递表单变量

时间:2013-10-27 00:40:43

标签: ruby-on-rails ajax json jquery

如何将表单变量传递给仅由AJAX用于将动态数据加载到表单的某个部分的模板?

我有一个属于课程的课程表格,以及一个课程has_many gradable_items。如果更改了课程选择输入,则必须更新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 belongs_to: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文件时,我得到'undefined local variable“f”'错误。我尝试在AJAX模板文件之外移动f.simple_fields_for调用...但是,然后我得到了相同的错误,但是对于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文件中被解释为字符串。

1 个答案:

答案 0 :(得分:0)

不要传递表单变量。分别构造嵌套表单。因此,在您的操作中创建一个新的Object.new,以便嵌套的表单(在类似于我的情况下)不需要知道父表单对象。为了使这项工作,我还必须设置id:和name:以便输入被赋予正确的结构。