繁体   English   中英

Rails表单,加载新的记录页面,而不是重定向到该页面

[英]Rails form, load new record page rather than redirecting to it

我正在用Rails创建我的第一个应用程序。 基本上,我有一个新的客户表单,通常在您输入新客户时,您将被重定向到您创建的记录。

但是,当我通过ajax加载我的所有页面时,我想加载新记录,而不是重定向到它。

我已经通过ajax触发了表单,我只需要知道如何访问新记录URL即可将其加载到我的容器中。

希望有道理。 提前致谢!

您可以在form_for helper方法中添加一个:remote => true选项,以便通过Ajax发布表单而不是页面重定向。 对于Ex:

<%= form_for(@post, :remote => true) do |f| %>
  ...
<% end %>

然后创建一个名为create.js.erb的新模板,该模板将在执行create方法后呈现。

在此模板中,您可以显示您创建的新记录的详细信息。

对于Ex:

$('some_element').replaceWith('<%=@posts.name %>');

编辑:您提到在JavaScript中使用load。 我通常会避免这种情况,因为您要进行两次服务器往返。 1)创建2)获取html以加载到div中。 此外,如果发生错误,无论发生什么事情,都将很难捕获并执行“好事”。

将remote:true选项添加到表单后,您需要处理服务器端发生的事情。

假设您使用REST,您将拥有一个带有create动作的控制器。 通常,此方法创建项目,然后返回创建页面的HTML。 取而代之的是,我们需要为该操作创建一个javascript视图。 这将告诉调用页面该操作何时生效。

假设您的表单具有一个名为“ new_record_form”的div,并且您还有另一个名为“ new_records”的div。 您需要清空表单中的表单元素,以有效地对其进行重置。 您还将希望将新记录添加到“ new_records” div中。

要将记录添加到新记录div中,您可以执行以下操作。

$("#new_records").append("#{@new_record.name}");

提交表单时,您应该会看到添加的内容。 调试问题的一种好方法是使用检查器。 如果您使用的是Chrome浏览器,请右键单击任意位置,检查元素并选择网络。 在提交表单之前执行此操作。 您将能够看到ajax调用和响应。 您的日志也将有所帮助。

别忘了也将表格空白。

注意:您提到所有页面都是ajax,但是我强烈建议您评估由于各种问题而导致的100%合理性。 并不是说这是关于该主题的最佳文章 ,但可能值得一读。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM