devise/ Rails – 如何删除特定的Flash消息? (成功签字)

使用devise,我想知道是否有办法删除一个特定的Flash消息? (成功签字)

我关心其他味精在视图中,所以只是为了login和签出。 我必须覆盖控制器还是有其他方法?

谢谢!

您只需将其定义为本地文件中的空string。 在这种情况下,你什么都看不到。

好!

正如Shingara所说,我在devise.en.yml中定义了一个空string

 sessions: signed_in: '' 

而且我也改变了一下(由nifty-generators提供):

 <% flash.each do |name, msg| %> <%= content_tag :div, msg, :id => "flash" if msg.length > 0 %> <% end %> 

这样,我的CSS不会出现。

在语言环境文件中的空string(如上所示),但也添加以下CSS代码隐藏(而不是你的闪光视图monkeying)

 .flash.alert:empty { display: none; } 

另一个灵活的方法是在行动后取消通知:

 class SessionsController < Devise::SessionsController after_action :remove_notice, only: :destroy private def remove_notice flash[:notice] = nil end end 

有了这个解决scheme,您可以添加条件来删除或不通知。

另一种方法是,如果您在创build操作中覆盖Devise控制器,请将此代码删除闪存消息:

 class MyDevise::SessionsController < Devise::SessionsController # POST /resource/sign_in def create super flash.delete(:notice) end # DELETE /resource/sign_out def destroy super flash.delete(:notice) end end 

这在其他SO问题中得到了回答。 有关如何覆盖Devise控制器的博客post ,请参阅我的博文

从我的angular度来看,当你可以很容易地修改控制器的工作方式时,我没有看清空string翻译的重点。 我想这种方式更加正确和令人满意。

更好的答案可以是重写sessionController中的销毁方法。

只需创build一个文件放置在:app / controllers / sessions_controller.rb

正如你所看到的,我们评论创buildFlash消息的行。

 class SessionsController < Devise::SessionsController # DELETE /resource/sign_out def destroy signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)) #set_flash_message :notice, :signed_out if signed_out && is_flashing_format? yield if block_given? respond_to_on_destroy end end 

我认为,现在devise理解,如果您将config/locals/devise.en.yml的错误消息更改为空string,它会自动忽略它。 至less这是我的工作。

您可以这样做,请相应地更改条件types和闪光types。

flash.delete(:alert)if flash [:alert] ==“您需要先login或注册才能继续。” @drivers = params [:keyword] .blank? ? []:Driver.find(params [:keyword])

你可以在过滤之前做到这一点。