我想flash[:notice]
在用户拒绝 EULA 条款时发送。所以它断开他并重定向到after_sign_out_path_for
(这是我的root_path
,这是我的public#index
)。但是当我们到达页面时,没有任何东西看起来好像flash[:notice]
丢失了。
这是我的代码:
免责声明_controller.rb
class DisclaimerController < ApplicationController
def refuse
@user = User.find(params[:id])
@user.update_column('accept_disclaimer', false)
@user.update_column('sign_in_count', 0)
@user.save
@user.reload
sign_out
flash[:notice] = "test
redirect_to root_path
end
公共.html.erb
<div class="main">
<%= render_flash_messages %>
<div class="main-inner">
<%= yield %>
</div><!-- /main-inner -->
</div><!-- /main -->
application_helper.rb(与我的布局应用程序和公共一起工作)
def render_flash_messages
render partial: "layouts/flash_messages"
end
_flash_messages.html.erb
<div class="show-notif">
<% if notice.present? %>
<div class="flash-message alert alert-success collapse in">
<%= notice %>
<button type="button" class="close" data-dismiss="alert"><i class="icon-remove"></i> <%= I18n.t('helpers.link.close') %></button>
</div>
<% end %>
</div>
我测试了我的部分 _flash_messages.html.erb,它在有通知时完美运行(即使在我的公共布局中)。
所以我尝试用 , 更改路径root_url
,root_path
但public_index_path
没有new_user_session_path
任何效果。
我还尝试了不同的编码合成器:
flash[notice] = "test" then redirect_to root_path
redirect_to root_path, :notice => "test"
redirect_to root_path, notice: "test"
redirect_to root_path, flash
redirect_to root_path, :flash => { :error => "Insufficient rights!" }
redirect_to root_path, flash: { :error => "Insufficient rights!" }
redirect_to(root_path, {:flash => { :error => "Insufficient rights!" }})
(每次我尝试之前列出的所有不同路径时)
我也尝试使用flash.keep
或flash.keep(:notice)
(我使用 Rails 版本 3.2.13)没有任何改变。
最后,我试图改变我的路线:
- 根 :to => 重定向 { |p, req| req.flash.keep; "public#index" } 而不是
- 根到:“public#index”
我想注意到我遇到了同样的问题,after_sign_in_path_for
我找到了解决方案。问题是flash[:notice]
在控制器中发送但不在此控制器的重定向中(即使使用 a flash.keep
)。所以我只是放了直接路径而不是 after_sign_in_path_for 并且效果很好。但在这里,它不是。
我究竟做错了什么?