如何在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)中的301重定向从根域到www子域?