Rails flash消息未在redirect_to中显示

时间:2012-04-01 12:30:32

标签: ruby-on-rails

在一个控制器中我有

flash[:error] = "Message"
redirect_to :root

:root由另一个控制器处理,视图有

<% if flash[:error] %>
  <p><%= flash[:error] %></p>
<% end %>

但没有显示任何内容。我插入&lt;%= debug controller.session%&gt;,这是我得到的

"flash"=>#<ActionDispatch::Flash::FlashHash:0x2e79208 @used=#<Set: {}>, @closed=false, @flashes={}, @now=nil>}

我做错了什么?

3 个答案:

答案 0 :(得分:5)

检查stackoverFlow问题:Rails: redirect_to with :error, but flash[:error] empty

  

仅在Rails API中说明:默认情况下,notice和:alert   应用为flash哈希值。如果您需要设置:错误值,那么   可以这样做:

redirect_to show_path, :flash => { :error => "Insufficient rights!" }

答案 1 :(得分:4)

我知道这已经很晚了,但我在Rails 4中遇到了同样的问题。如果你在redirect_to中使用_url助手,flash消息将会通过:

def update_post
    respond_to do |format|
        if @post.update(post_params)
            format.html { redirect_to show_post_meta_url, notice: 'Post was successfully updated.' }
        else
            format.html { render action: 'edit_post' }
        end
    end
end

希望这有助于某人。

答案 2 :(得分:0)

这是我在控制器中显示警告和通知的方式

redirect_to user_attachments_path, notice: "The file #{@attachment.name} has been uploaded."

在渲染当前页面时使用flash[:error]flash[:notice],而不是像这里重定向:

if params[:attachment].nil?
      flash.now[:alert] = "No file found!"
      render "new"
else