Ruby on Rails 3:尝试从不同的控制器呈现视图.但我得到了同一个控制器



在我的应用程序中,我创建了一个表单来创建新的帖子(帖子是一个模型)。我有一个名为posts的控制器。表单位于admins控制器中。表单使用form_for(@post)。它发送到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]}.

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

render 'admins/newpost'

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

http://localhost:3000/posts

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

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

如果你需要处理html请求,你可以把你的表单指向你选择的url:

form_for @post, url: route_to_current_controller

处理该控制器上的create_post操作,并确保路由设置正确。它不好的一面是,您将在不同的控制器中处理posts创建,而不是您的PostsController。

您可能正在寻找render template: 'admins/newpost'。如果您仍然得到关于缺少模板的错误,请对照views/admins/newpost的可用格式检查请求的格式。

我认为你可能想要render new,当有错误存在。错误信息应该由rails自动填充。

是否可以验证app/views/dasharea内部是否有一个名为newpost.html.erb的文件?

相关内容

  • 没有找到相关文章

最新更新