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

时间:2013-03-07 11:51:37

标签: ajax ruby-on-rails-3

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

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

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

希望这是有道理的。提前谢谢!

2 个答案:

答案 0 :(得分:0)

您可以添加一个选项:remote =>对于form_for帮助方法,如果不是页面重定向,则表单将通过ajax发布。 对于Ex:

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

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

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

对于Ex:

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

答案 1 :(得分:0)

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

一旦你为表单添加了remote:true选项,你需要处理服务器端的事情。

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

假设您的表单有一个名为“new_record_form”的div,并且您有另一个名为“new_records”的div。您需要清空表单中的表单元素,从而有效地重置它。您还需要将新记录添加到“new_records”div。

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

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

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

不要忘记删除表单。

注意:您提到您的所有页面都是ajax,但我强烈建议您评估是否由于产生的各种问题而使其100%有意义。不是说这是关于这个主题的最好的article,但可能值得一读。