通过AJAX将动态字段添加到嵌套表单

Cry*_*ark 10 ajax ruby-on-rails nested-forms railscasts

我一直在观看和重现我的应用程序上的这些railscast:196-nested-model-form-part-1197-neested-model-form-part-2.我还没有专业帐户,所以我无法观看修改后的剧集.

我正在rails4(edge)下开发并且link_to_function已经被弃用而不喜欢不引人注目的JS(这很棒).

我将保留上述railscast的示例(即调查/问题).我想做的是使用问题的部分通过不引人注目的JavaScript,我只是不知道我应该如何以及在哪里做到这一点.

我想到了两种方法:

  • 第一种方法是添加我app/assets/javascripts的文件surveys.js与功能,add_question但我不知道如何从这里使用我的部分.
  • 其他方式是在我的行动中创建一个新的行动,SurveyController使用部分问题作出回应,但我对调查控制器中的问题采取特定行动的事实感到困扰.

我不禁认为必须有更好的方法来做到这一点.

Arj*_*jan 18

你知道远程链接和表格吗?您可以在此处使用远程链接来完成您想要的任务.

在你看来:

link_to 'Add question', add_question_path(@survey), remote: true
Run Code Online (Sandbox Code Playgroud)

在你的控制器中

def add_question
  @survey = Survey.find(params[:id])

  respond_to do |format|
    format.js #add_question.js.erb
  end
end
Run Code Online (Sandbox Code Playgroud)

最后一步是创建文件app/views/surveys/add_question.js.erb

$('#my_survey').append('<%=j render partial: 'my_question_partial' %>')
Run Code Online (Sandbox Code Playgroud)

不要忘记为ask_question_path创建路由

有关远程链接和表单的更多信息,请参阅:http://tech.thereq.com/post/17243732577/rails-3-using-link-to-remote-true-with-jquery-ujs

  • 它适用于嵌套表单元素吗?表单的对象必须在某处传递.它似乎没有回答所问的问题 (8认同)
  • 为什么在`<%= j render partial`里面有一个aj (2认同)
  • @Clam`j`是`escape_javascript` javascript帮助器的别名.http://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript (2认同)

dch*_*cke 9

我也没有关于Railscasts的专业帐户,但有时候看看Ryan的Github帐户是个好主意.他经常将宝石发展成他在剧集中所涵盖的内容.在那里你会发现这个令人敬畏的nested_form gem,它可以完全满足您的需求.

当然你可以重新发明轮子,但我认为使用Ryan的宝石更加容易和快捷.该文档完美地解释了如何使用它.玩得开心!