jal*_*nge 7 forms ruby-on-rails actionview formbuilder ruby-on-rails-3.1
在给定某个AJAX请求的情况下,我正试图以动态创建表单元素.
这是我的设置:
视图:
<%= link_to 'Next', check_unique_id_students_path, :remote => true %>
<div id="guardian_student_details"></div>
Run Code Online (Sandbox Code Playgroud)
控制器:
def check_unique_id
@student = Student.new
@this_form = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{})
end
Run Code Online (Sandbox Code Playgroud)
JS:
jQuery("#guardian_student_details").html("<%=escape_javascript(render :partial => "student_details", :locals => { :s => @this_form }) %>");
Run Code Online (Sandbox Code Playgroud)
部分:
<% puts s.text_field :first_name %>
<% puts s.field_helpers %>
Run Code Online (Sandbox Code Playgroud)
出于调试目的,我在部分的开头放置了以下行:
<% puts s.class.to_s %>
<% puts s.object.to_s %>
Run Code Online (Sandbox Code Playgroud)
打印出:
ActionView::Helpers::FormBuilder
Student
Run Code Online (Sandbox Code Playgroud)
这应该工作.但是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:
Run Code Online (Sandbox Code Playgroud)
app/views/students/_student_details.html.erb:3:in _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"变量有关.我玩过并接受几乎任何东西,如果打印的是零.任何帮助,将不胜感激.谢谢
最后的说明:
对于需要在控制器中构建表单构建器的任何人,view_context 仍然可以在那里工作。使用 Rails 4.1.4:
@object = Object.new
@f = ActionView::Helpers::FormBuilder.new(:object, @object, view_context, {})
Run Code Online (Sandbox Code Playgroud)
在控制台中尝试一下:
s = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{})
s.text_field :first_name
Run Code Online (Sandbox Code Playgroud)
你也会有同样的错误。我认为问题来自于您创建的 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();
Run Code Online (Sandbox Code Playgroud)
一般来说,我更喜欢将 javascript 和 ruby 分开。
| 归档时间: |
|
| 查看次数: |
3538 次 |
| 最近记录: |