将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| %>
<% end %> #js jQuery("#guardian_student_details").show();
一般来说,我更喜欢保持javascript和ruby分开。