在我的应用程序中,我创建了一个表单来创建新的帖子(帖子是一个模型)。我有一个名为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
的文件?