Ruby on rails 闪存不是';t在保存过程中渲染模型错误

Ruby on rails 闪存不是';t在保存过程中渲染模型错误,ruby-on-rails,Ruby On Rails,我不明白为什么我的flash在试图保存包含验证错误的模型时不显示 我的控制器在创建方法中具有以下功能: if @post.save redirect_to admin_posts_path else render 'new' end 我的布局如下所示: <% flash.each do |message_type, message| %> <div class="alert alert-<%= message_type %>"&

我不明白为什么我的flash在试图保存包含验证错误的模型时不显示

我的控制器在创建方法中具有以下功能:

  if @post.save
    redirect_to admin_posts_path
  else
    render 'new'
  end
我的布局如下所示:

<% flash.each do |message_type, message| %>
    <div class="alert alert-<%= message_type %>"><%= message %></div>
<% end %>
@消息={:title=>[“不能为空”],:body=>[“不能为空”]}, @详细信息={:title=>[{:error=>:blank}],:body=>[{:error=>:blank}]>

为什么在我尝试保存帖子时不会显示flash错误? 它显然没有保存,错误集合也不是空的


模型的错误不是自动添加到闪存中的吗?

您似乎混淆了模型验证和闪存,它们是完全独立的,或者至少意味着没有连接

flash只是一种简单的基于会话的机制,用于将消息传递给后续请求。Rails*中不会自动向闪存添加任何内容

模型错误是由模型中的验证创建的,在请求之间不会持久。相反,您只是在视图中迭代它们以响应表单提交

<% if @model.errors.any? %>
<ul>
  <% @model.full_messages.each do |m| %>
    <%= content_tag :li, m %>
  <% end %>
</ul>
<% end %>


这是在相同的请求中完成的。这就是为什么当验证失败时,您不在Rails中重定向。

您必须显式地设置flash消息
flash。现在[:alert]=something
(对于当前请求)或
flash[:alert]=something
(如果您重定向)。我看不出你在哪里设置。你的意思是我必须做
flash[:danger]=@post.errors
?你从哪里得到flash[:danger]?我假设您在应用程序布局中没有为其设置条件。@Blankman,您必须指定要存储在flash散列中的内容。我建议您阅读Flash官方指南,这适用于vanilla rails。有很多宝石,比如自动添加闪光信息的回复者。
<% if @model.errors.any? %>
<ul>
  <% @model.full_messages.each do |m| %>
    <%= content_tag :li, m %>
  <% end %>
</ul>
<% end %>