在我的应用中,我创建了一个表单来创建新帖子(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)!我怎样才能做到这一点?我做错了什么?
答案 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
的文件?