Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 设计/轨道-如何删除特定的flash消息?(已成功登录)_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 设计/轨道-如何删除特定的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就不会

使用Desive,我想知道是否有办法删除特定的flash消息?(已成功登录)

我关心视图中的其他消息,因此它只针对已登录和已注销的消息。 我必须覆盖控制器还是有其他方法


谢谢大家!

您只需将其定义为本地文件中的空字符串。在这种情况下,您什么也看不见。

好的

正如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