Javascript 使用AJAX在Rails中提交动态表单的最佳方式是什么?

Javascript 使用AJAX在Rails中提交动态表单的最佳方式是什么?,javascript,jquery,ruby-on-rails,ajax,forms,Javascript,Jquery,Ruby On Rails,Ajax,Forms,在我的应用程序中,我管理许多包含许多变量的工作流。 -每个变量都有自己的值。 -每个工作流都与一个或多个变量关联 我有一个工作流配置页面,用户将在其中选择一个工作流,然后显示其相关变量以输入值。我遇到的问题是如何从用户那里找到保存表单条目的最佳方法。通常我会对/variables/:id/update这样的对象进行ajax调用,但在这种情况下,我希望在按下save按钮的同时更新多个变量。我的想法是在variables控制器中创建一个自定义方法来处理这个问题,但在尝试中,我得到了一个错误,即无法验

在我的应用程序中,我管理许多包含许多变量的工作流。 -每个变量都有自己的值。 -每个工作流都与一个或多个变量关联

我有一个工作流配置页面,用户将在其中选择一个工作流,然后显示其相关变量以输入值。我遇到的问题是如何从用户那里找到保存表单条目的最佳方法。通常我会对/variables/:id/update这样的对象进行ajax调用,但在这种情况下,我希望在按下save按钮的同时更新多个变量。我的想法是在variables控制器中创建一个自定义方法来处理这个问题,但在尝试中,我得到了一个错误,即无法验证CSRF令牌的真实性

我真的很感激能得到的任何帮助。我觉得可能有更好的方法,但我有点生疏,只是不知道。有人有什么建议吗

customize.html.erb中的我的表单如下所示:

<div class="col-md-10" style="background-color:yellow; height: 216px; ">
    <div class="h3">Required ContextDataDef Values:</div>
      <div class="workflow_variables">           
          <div id="placeholder"></div>                             
    </div>
</div>
这很好,但我真的想调用一个不同于自定义的方法。我想得到的是:

 Started GET "/clients/4/updateVariable?&rbYouTubeUsername=MyUser&varID=29"
或者在一个完美的世界里,我会得到:

 Started GET "/variable/29/update?&rbYouTubeUsername=MyUser"

我缺少的关键元素是清楚地了解如何将data remote='true'参数与action参数一起添加,以便控制将表单数据发送到哪个控制器方法。一旦我将这两个元素都添加到表单中,一切都是有意义的

 data-remote='true' action='update_variable'
现在的结果是

 Started GET "/clients/4/update_variable?rbYouTubeUsername=AnotherNewVal&varID=29" 

rails已经在表单中内置了对ajax的支持,您可以在这里查看这并没有真正的帮助。我知道rails表单帮助程序,但不知道当页面首次加载时表单还不存在时如何使用它们。只有当用户单击工作流以触发表单变为可见时,表单才会存在。它并不总是存在的事实导致了问题的复杂性穆罕默德是正确的。您希望使用Rails的低调javascript思想。即使你不使用Ruby端的表单帮助程序,你仍然可以添加data remote=“true”来获得你想要的效果。因此,当我添加data remote=true时,我最终得到的是这个start get”/clients/4/customize?&rbYouTubeUsername=MyUser&varID=29“这很好,但我真的想调用一个不同于customize的方法。我想要得到的是:Started get“/clients/4/updateVariable?&rbYouTubeUsername=MyUser&varID=29”或者在一个完美的世界中,我会得到:Started get“/variable/29/update?&rbYouTubeUsername=MyUser”
 data-remote='true' action='update_variable'
 Started GET "/clients/4/update_variable?rbYouTubeUsername=AnotherNewVal&varID=29"