我一直关注这个railscast http://media.railscasts.com/videos/074_complex_forms_part_2.mov
我有一个任务和步骤。每项任务都可以有很多步骤。
我正在尝试通过点击链接添加嵌套表单。 railscast显示的内容与我所拥有的内容之间的区别在于我的步骤控制器中有我的步骤形式,但这应该不是问题。
我也在使用带有jQuery的rails3,但还没有看到有关如何在rails3中执行此操作的任何教程。
我的任务/ new.html.erb
<%= form_for @task, :html=>{:multipart => true do |f| %> <%= render 'form', :f=>f %> < end >
for my task / _form.html.erb
<%= f.label :task_name %> <%= f.text_field :task_name %> <%= f.label :media %> <%= f.file_field :media %> < div id="steps" > <%= render 'steps/form', :f=> f % > < /div> <%= link_to_function "Add Step" do |page| page.insert_html :bottom, :steps, :partial=>'steps/form', :object => Step.new end %> <%= f.submit %>
步/ form.html.erb
<p class="fields"> <%= fields_for :steps do |builder| %> <%= builder.label :title > <%= builder.text_field :title > <%= builder.label :description %> <%= builder.text_area :description %> <% end %> </p>
页面加载正常,但是当我点击“添加步骤链接”时,我收到两个javascript错误。
RJS error: TypeError: Element.insert is not a function
然后
Element.insert("steps", {bottom: "<p class=\"fields\">\n\t</p>\t"});
答案 0 :(得分:2)
link_to_function在rails3中不再有效。
我做的是 1)观看此截屏视频http://railscasts.com/episodes/205-unobtrusive-javascript
而不是'link_to_function,我现在有
<% link_to "Add Step", @step, :remote=>true, :class=>'addStep'%>
然后我有一个content_for来处理和显示javascript(jQuery)
$('a.addStep').click(function(){ $('div#newStep').html("<= escape_javascript(render('steps/form'))%>"); })
这是将表单添加到页面,但并不是全部连接,因为渲染没有将步骤连接到任务。还不完全确定如何编写它,但表单现在被添加到页面中,它将无法正确提交。
答案 1 :(得分:0)
你应该试试这个宝石https://github.com/ryanb/nested_form,这样就可以更容易地设置它而不会有任何麻烦。您是否还使用http://railscasts.com/episodes/196-nested-model-form-part-1和http://railscasts.com/episodes/197-nested-model-form-part-2检查了Rail-casts。这些是复杂形式的全新形式,而不是它的嵌套模型,同样的东西。
摆脱所有'h'并确保将应用程序帮助程序底部的Jquery行更改为:
link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
此主题可以指导您:rails fields_for render partial with multiple locals producing undefined variable
另请阅读Rails演员的评论区域,因为他们通常一直都有更新的代码。