Ruby on rails 设计/轨道-如何删除特定的flash消息?(已成功登录)
使用Desive,我想知道是否有办法删除特定的flash消息?(已成功登录) 我关心视图中的其他消息,因此它只针对已登录和已注销的消息。 我必须覆盖控制器还是有其他方法Ruby on rails 设计/轨道-如何删除特定的flash消息?(已成功登录),ruby-on-rails,devise,Ruby On Rails,Devise,使用Desive,我想知道是否有办法删除特定的flash消息?(已成功登录) 我关心视图中的其他消息,因此它只针对已登录和已注销的消息。 我必须覆盖控制器还是有其他方法 谢谢大家! 您只需将其定义为本地文件中的空字符串。在这种情况下,您什么也看不见。好的 正如Shingara所说,我在designe.en.yml中定义了一个空字符串 sessions: signed_in: '' 我还对以下行做了一些更改(由漂亮的生成器提供): 如果msg.length>0%> 这样,我的css就不会
谢谢大家! 您只需将其定义为本地文件中的空字符串。在这种情况下,您什么也看不见。好的 正如Shingara所说,我在designe.en.yml中定义了一个空字符串
sessions:
signed_in: ''
我还对以下行做了一些更改(由漂亮的生成器提供):
如果msg.length>0%>
这样,我的css就不会出现。语言环境文件中的空字符串(如上所述),但还要添加以下css片段以隐藏(而不是在flash视图中蒙混过关)
从我的观点来看,当您可以轻松修改控制器的工作方式时,我不认为清空字符串转换有什么意义。 我想这种方式更加正确和令人满意 更好的答案是重写sessionController中的destroy方法 只需在以下位置创建一个文件:app/controllers/sessions\u controller.rb 如您所见,我们对创建flash消息的行进行了注释
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
class sessioncontroller
另一种灵活的方法是在操作后取消通知:
class SessionsController < Devise::SessionsController
after_action :remove_notice, only: :destroy
private
def remove_notice
flash[:notice] = nil
end
end
class sessioncontroller
使用此解决方案,您可以为删除或不删除通知添加条件。我认为Deavate现在明白,如果您将
config/locals/designe.en.yml
中的错误消息更改为空字符串,它将自动忽略它。至少这是我的工作原理。您可以这样做,请相应地更改条件类型和闪光类型
flash.delete(:alert)如果flash[:alert]=“您需要登录或注册才能继续。”
@驱动程序=参数[:关键字]。空白?[]:Driver.find(参数[:关键字])
您可以在before filter中执行此操作。另一种方法是,如果您覆盖Desive controller,请在“创建”操作中输入此代码,该代码将删除闪存消息:
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
类MyDeviate::SessionController
有关如何覆盖Desive控制器的博文,请参见谢谢shingara,事实上我这样做了,但我的css仍然出现了。我希望有更好的方法来实现这一点:)此文件通常位于
config/locales/designe.en.yml
此答案错误(css仍然显示)且不完整(定义什么?在哪里?)。正确答案来自贝诺伊特,为我工作!容器没有出现!稍微整理一下,您可以将“msg.length>0”更改为“msg.present?”。该文件通常位于config/locales/designe.en.yml
您可能不想这样做,因为您正在进行猴子补丁。如果进行了错误修复,那么您将失去修复。通过将您不关心的内容设置为空字符串,并确保不打印空字符串消息,您正在按照设计的方式使用系统。
class SessionsController < Devise::SessionsController
after_action :remove_notice, only: :destroy
private
def remove_notice
flash[:notice] = nil
end
end
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