我在Rails 3.2上运行了一个老式的Spree 2.0在线商店,我尝试使用更清晰的错误处理进行自定义
config.exceptions_app = self.routes
在我的config / application.rb中。
出于调试目的,我已经转过
config.consider_all_requests_local = false
在我的config / environments / development.rb
中在我的routes.rb中我有:
match '/404', to: 'errors#file_not_found'
在我的errors_controller中我有:
def file_not_found
flash[:error] = 'The page you requested could not be found.'
flash.keep
redirect_to :back
rescue ActionController::RedirectBackError
flash[:error] = 'The page you requested could not be found.'
flash.keep
redirect_to '/'
end
我尝试了几种不同的方法,包括http://api.rubyonrails.org/classes/ActionController/Redirecting.html中的示例中描述的方法,但结果是,如果我专门访问localhost:3000/404,则flash消息有效,但不起作用如果我去一些不存在的URL,例如localhost:3000 / asdfasdf。
在app / views / spree / layouts中我有spree_application.html.erb,我有
<%= flash_messages %>
反过来在/ spree_core-2.0.10 / app / helpers / spree / base_helper.rb中定义
def flash_messages(opts = {})
opts[:ignore_types] = [:commerce_tracking].concat(Array(opts[:ignore_types]) || [])
flash.each do |msg_type, text|
unless opts[:ignore_types].include?(msg_type)
concat(content_tag :div, text, class: "flash #{msg_type}")
end
end
nil
end