将ActionView :: Helpers :: FormBuilder传递给部分

鉴于某个AJAX请求,我正试图以动态创建表单元素。

这是我的设置:

视图:

 true %> 

控制器:

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

JS:

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

部分:

   

出于调试目的,我在部分的开头放置了以下行:

   

打印出:

 ActionView::Helpers::FormBuilder Student 

这应该工作。 但是rails会出现以下错误:

 ActionView::Template::Error (undefined method `text_field' for nil:NilClass): 1:  2: 

3: 'text_input is_empty' %> 4: * 5:

6:

app / views / students / _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,我之前只validation了2行。 有人有什么想法吗? 我不知道这是否与控制器中初始化的“@template”变量有关。 我玩过并接受几乎所有东西,如果打印的是零。 任何帮助,将不胜感激。 谢谢

最后说明:

我试图实现这个: accept_nested_attributes_for partials的AJAX更新

在视图中,我发现’view_context’在Rails 3.1中不起作用。 而是在创建FormBuilder对象时尝试’self’。

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

对于需要在控制器中构建表单构建器的任何人,view_context仍然可以在那里工作。 使用Rails 4.1.4:

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

在控制台中尝试这个:

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

您将遇到相同的错误。 我认为问题来自你创建form_builder对象,即使我不知道确切的错误……

在我看来,你的解决方案有点复杂。 你可以尝试这个解决方案:

 #html.erb <% form_for @student do |f| %> 
<%= render :partial => "student_details", :locals => { :s => f }) %>
<% end %> #js jQuery("#guardian_student_details").show();

一般来说,我更喜欢保持javascript和ruby分开。