2013-10-27 8 views
0

如何将表单变量传递给仅由AJAX用于将动态数据加载到表单部分的模板?使用AJAX更新依赖表单内容...传递表单变量

我有一门课属于belongs_to课,而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文件,我得到“未定义的局部变量‘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 

我试图传递表单变量作为数据PARAM和URL PARAM,但它得到的gradable_items_inputs.html.erb文件解读一个字符串。

回答

0

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

+0

上述的缺点是发送到表单的原始对象不会是返回的错误。所以,如果表单被重定向并且页面重新加载......它将不会有任何失败的数据。 – hellion