我想在我创建的视图/方法中显示错误消息。问题是我在模型中添加了错误,如下面的代码所示:
errors.add :base, 'It can't be destroyed because some users use it'
但是在我尝试渲染时,视图中没有显示错误。
我复制了表单的错误渲染机制。 我是否必须制作表格或类似内容以显示错误消息?
答案 0 :(得分:0)
您可以使用flash功能进行错误。当您的控制器收到模型中的错误时,请执行以下操作:
redirect_to show_url(@post), alert: "It can't be destroyed because some users use it"
答案 1 :(得分:0)
发生验证错误时,您应该能够在视图模板中的任何位置添加错误消息。它看起来像这样:
<% if @post.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% @post.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
来源:http://guides.rubyonrails.org/active_record_validations.html#working-with-validation-errors
答案 2 :(得分:0)
确保两件事:
您在视图模板中有以下块:
<%= @posts.errors.full_message.each |key, value| %>
# display value
<% end %>
在控制器中分配错误消息:
redirect_to posts_path, flash[:alert] = "It can't be destroyed because some users use it"
答案 3 :(得分:0)
假设您正在更新 Dogs index
视图中的单条狗,当您需要在没有 Javascript 和表单外快速显示验证错误时,解决方案是将错误数组(如单个错误)发送到错误部分布局并遍历它们。
请注意,此方法不是常规方法,并且有一些缺点。您需要从控制器redirect_to
,因为render
won't work well,因此您将刷新页面并向上冒泡(传播)到顶部。
# dogs_controller.rb
class DogsController
def index
@dogs = Dog.all
end
def update
if dog.update
# ...
else
flash[:danger] = dog.errors.full_messages
redirect_to dogs_path
end
end
end
# app/views/layouts/_errors.html.haml
- flash.each do |message_type, message|
- if message.is_a?(Array)
# show validation errors outside of form workaround
- message.each do |msg|
.alert.alert-danger= msg
- else
# usual error handler (from controller flash)
= content_tag(:div, message, class: "alert alert-#{message_type}")