1

在我的应用程序中,我创建了一个表单来创建新帖子(帖子是一个模型)。我有一个名为 posts 的控制器。该表单位于管理员控制器中。表单使用 form_for(@post)。它发布到后控制器。在这种方法中,帖子被成功创建。但问题在于提交失败。在表单中,我添加了代码以显示错误

    <% if @post.errors.any? %>
        <div id="error_explanation">
            <div class="alert alert-error">
                The form contains <%= pluralize(@post.errors.count, "error") %>
            </div>
            <ul>
                <% @post.errors.full_messages.each do |msg| %>
                    <li> <%= msg %> </li>
                <% end %>
            </ul>
        </div>
    <% end %>

但是在 post 控制器中,如果提交失败,我已将其设置为 redirect_to admins 控制器中的 newpost 页面。重定向时,我会丢失错误消息。

所以,我补充说

render 'dasharea/newpost'

localhost:3000/dasharea/newpost 是具有表单的页面的 URL。使用此代码,它说

Missing template dasharea/newpost with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

但我已经在那个页面了?然后我尝试添加控制器和这样的动作(注意:我正在编辑帖子控制器的创建动作。我需要在管理员控制器中呈现 newpost 动作):

render 'admins/newpost'

然后,它将引导我到帖子:

http://localhost:3000/posts

但是现在,表格在那里,我可以看到错误。但我需要渲染我有表单(dasharea/newpost)的原始页面!我怎样才能做到这一点?我做错了什么?

4

3 回答 3

2

我的解决方案:AJAX 表单。没有更多的问题。用javascript当场更新表格。window.location.href = '/your-url'如果需要,您甚至可以使用重定向。

如果您需要处理 html 请求,您始终可以将表单指向您选择的 url:

form_for @post, url: route_to_current_controller

处理此控制器上的 create_post 操作并确保您的路线设置正确。不好的一面是您将在与 PostsController 不同的控制器中处理帖子创建。

于 2013-02-02T19:23:20.317 回答
1

您可能正在寻找render template: 'admins/newpost'. 如果您仍然收到有关缺少模板的错误,请根据视图/管理员/新帖子的可用格式检查请求的格式。

于 2013-02-01T03:53:18.360 回答
0

render new当出现错误时,我认为您可能想要。错误消息应该由 rails 自动填充。

您还可以验证是否有一个名为newpost.html.erbinside的文件app/views/dasharea

于 2013-02-03T12:33:03.920 回答