在Rails中通过弹出窗口发布表单

时间:2009-10-21 07:06:57

标签: ruby-on-rails forms popup

我有一个名为Details的模型,两个控制器方法new和create。新方法显示一个表单来创建详细信息(在new.html.erb中),该表单将发布到保存它的Create方法。 (当它成功保存时,它会使用详细信息呈现new.html.erb文件。)这可以按预期工作。

现在我想要一个单独的页面,其中包含一个链接以填写这些详细信息。我希望点击通过弹出窗口,例如红色框来完成预期的工作。当您单击该链接时,弹出窗口应显示表单,其提交应发布表单,如果成功完成,则刷新原始页面。如果帖子未保存,则相同的表单应显示错误。我需要做些什么才能让它在Ror中运行?我想我需要一些东西进入new.js.rjs并且可能是create.js.rjs,但我无法弄清楚要放在这些文件中的内容。

2 个答案:

答案 0 :(得分:2)

Redbox更新页面的dom以在其末尾添加div。所以你的表格是主页的一部分。
因此,如果您在此红色框中添加表单标记,则所有页面都将重新加载,因为只有一个。

因此,您可以在页面中的任何位置添加(最好在结尾处):

<div id="redbox" style="display: none;">
    <%= form_for @details do %>
        # Whatever form fields you want here
    <% end -%>
</div>

您执行的链接将打开redbox:

<%= link_to_redbox 'Open The Details Form', 'redbox' %>

这会在您的表格中显示您的红框 因为它是同一个页面,而不是一个新的窗口,当你验证你的表单时,它会重新加载所有的。

答案 1 :(得分:0)

我使用了link_to_remote_redbox,在点击时,在弹出窗口中获取由新方法调用呈现的表单。它提交给创建功能,它现在正在工作。实际上我以前没有ajax使它工作,我很难使它与ajax一起工作。一旦我为ajax调用做了单独的部分,并且这样做,问题就解决了:     respond_to do | format |       format.js {render:template =&gt; '细节/ ajax_template'}       ...     端

我为创建和新方法调用提供了不同的模板,使用了:html =&gt; {:id =&gt;表格中的'some-id'}和:update =&gt; {:some-id}将表单替换为正常工作的消息。

所以我不知道我需要单独的模板用于不同风格的表单,当我提出上述问题时,我需要使用:update选项替换表单。