Ruby on Rails 3:尝试从不同的控制器渲染视图。但我到同一个控制器

时间:2013-01-20 15:38:36

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.2

在我的应用中,我创建了一个表单来创建新帖子(Post是一个模型)。我有一个名为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]}.

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

render 'admins/newpost'

然后,它将引导我发帖:

http://localhost:3000/posts

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

3 个答案:

答案 0 :(得分:2)

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

如果您需要处理html请求,您可以随时将表单指向您选择的网址:

form_for @post, url: route_to_current_controller

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

答案 1 :(得分:1)

您可能正在寻找render template: 'admins/newpost'。如果您仍然遇到有关丢失模板的错误,请根据views / admins / newpost的可用格式检查请求的格式。

答案 2 :(得分:0)

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

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