如何在Ruby on Rails的应用程序级别添加toastr JS通知

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Ruby on Rails的应用程序级别添加toastr JS通知相关的知识,希望对你有一定的参考价值。

我正在使用toastr gem作为通知。每当application_controller.rb上的方法处于活动状态时,我都试图向我的应用程序添加敬酒通知。

rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

    def user_not_authorized
      toastr.info('You cannot access this page.', 'info')
      redirect_to contacts_path
    end 

如您所见,我试图在控制器上添加toastr功能,但这不起作用。每当此方法生效时,或者非管理员用户访问未授权的页面时,如何显示此敬酒通知?

答案

[toastr是一个javascript库,您不能在Ruby代码中使用它。

但是,如果要向用户显示某种通知并在Rails控制器的上下文中定义它们,则可以使用Rails Flash Notifications

application_controller.rb文件中:

rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized

def user_not_authorized
  flash[:notice] = "You cannot access this page."
  redirect_to contacts_path
end

并且在html / ERB文件中的某处,您将为控制器中设置的每个Flash通知呈现HTML元素:

<html>
  <!-- <head/> -->
  <body>
    <% flash.each do |name, msg| -%>
      <%= content_tag :div, msg, class: name %>
    <% end -%>

    <!-- more content -->
  </body>
</html>

您可以在上面的链接中查看其用法的更多示例。

另一答案

要基于first answer,这就是我在应用程序中所做的。在控制器的flash中添加了我想显示的内容,然后在toastr]中显示了Flash消息

我在这里使用了很好的slim扩展名,将其添加到gem 'slim-rails'并将此文件另存为_messages.html.slim,然后可以将其包括在布局文件中。

- flash.each do |name, msg|
  javascript:
    window.onload = function() {  
      var name = "#{name}";

      if (name == 'info' || name == 'notice') {
        toastr.info("#{msg}");
      }
      else if (name == 'success') {      
        toastr.success("#{msg}");
      } 
      else if (name == 'error') {      
        toastr.error("#{msg}");
      } 
      else {
        toastr.info("#{msg}");
      }        
    };

以上是关于如何在Ruby on Rails的应用程序级别添加toastr JS通知的主要内容,如果未能解决你的问题,请参考以下文章

Ruby on Rails 的社交媒体共享按钮 Gem

堆栈级别也是Ruby on rails

乘客(Ruby on Rails)中的301重定向从根域到www子域?

Ruby on Rails:如何使用迁移向现有列添加非空约束?

Ruby on Rails——堆栈级别太深

如何在 ruby​​ on rails 中集成多个支付网关(多个商家)?