2013-10-27 11 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