7

我試圖在給定某個AJAX請求的情況下創建表單元素。將ActionView :: Helpers :: FormBuilder傳遞給部分

這是我的設置:

查看:

<%= link_to 'Next', check_unique_id_students_path, :remote => true %> 

    <div id="guardian_student_details"></div> 

控制器:

def check_unique_id 
    @student = Student.new 
    @this_form = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{}) 
    end 

JS:

jQuery("#guardian_student_details").html("<%=escape_javascript(render :partial => "student_details", :locals => { :s => @this_form }) %>"); 

部分:

<% puts s.text_field :first_name %> 
<% puts s.field_helpers %> 

出於調試目的,我把下面的線在我的部分的開始:

<% puts s.class.to_s %> 
<% puts s.object.to_s %> 

此打印出:

ActionView::Helpers::FormBuilder 
Student 

這應該工作。不過Rails是給下面的錯誤:

ActionView::Template::Error (undefined method `text_field' for nil:NilClass): 
1: <% puts s.class.to_s %> 
2: <p> 
3: <%= s.text_field :first_name, :class => 'text_input is_empty' %> 
4: <%= s.label :first_name %><strong>*</strong> 
5: </p> 
6: 

應用程序/視圖/學生/ _student_details.html.erb:3:_app_views_students__student_details_html_erb__2485891544130782916_2214680440' app/views/students/check_unique_id.js.erb:2:in _app_views_students_check_unique_id_js_erb__3504800328150418937_2214933160'

這意味着 「s」 爲NIL東西,我只是驗證2線之前。有人有任何想法嗎?我不知道這是否與在控制器中初始化的「@template」變量有關。我玩過並接受幾乎任何東西,如果打印是零。 任何幫助,將不勝感激。由於

最後一點:

我試圖實現這個:AJAX update of accepts_nested_attributes_for partials

回答

0

在控制檯試試這個:

s = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{}) 
s.text_field :first_name 

您將有同樣的錯誤。我認爲問題來自您創建form_builder對象,即使我不知道確切的錯誤...

您的解決方案似乎對我來說有點複雜。你可以試試這個解決方案:

#html.erb 
<% form_for @student do |f| %> 
    <div id='guardian_student_details' class='hide-this-block'> 
    <%= render :partial => "student_details", :locals => { :s => f }) %> 
    </div> 
<% end %> 

#js 
jQuery("#guardian_student_details").show(); 

一般來說,我更喜歡保持JavaScript和紅寶石分離。

+0

感謝亞歷山大,我知道這可行,但我的功能將大大受益,如果我可以用FormBuilder建議的方式做到這一點。 – jalagrange

+0

這是Rails 2.3還是3+?不知道在Rails 3中是否存在@template變量。使用您提到的AJAX更新後,自從發佈該方法以來,我更改了代碼。最後,我使用了http://media.pragprog.com/titles/fr_arr/multiple_models_one_form.pdf的修改版本,而不是抓取現有索引並增加它(它很容易打破,特別是如果我想擴展嵌套到另一個層面)。 – Pasted

+1

你好,這是rails 3.1。感謝您的意見和鏈接。我試圖用view_context而不是@template來實現你的解決方案,它以下面的方式破壞:NameError:未定義的局部變量或方法'view_context'for main:Object – jalagrange

4

在視圖中,我發現'view_context'在Rails 3.1中不起作用。創建FormBuilder對象時請嘗試「自我」。

S = ::的ActionView ::助手FormBuilder.new(:學生,@student,自我,{},PROC {})

4

對於任何人都需要建立在控制器中的表單生成器,view_context仍然有效那裏。使用Rails 4.1。4:

@object = Object.new 
@f = ActionView::Helpers::FormBuilder.new(:object, @object, view_context, {}) 
相關問題