我正在尝试使用skip_before_filter,只有当应用程序处于生产模式. (我不希望我的开发实例是公开的,我希望应用程序自动检测它是什么类型的实例,并且当它不在生产模式时显示登录屏幕).所以我的应用程序控制器有以下一行:
before_filter :authenticate_user!,:except => "sign_in" #redirects to log-in
skip_before_filter :authenticate_user!,:only => :show,:if => :in_production #public pages are public,but only when in production.
而生产只是简单的:
def in_production ENV['RAILS_ENV']=='production' end
我意识到这里可能有其他的途径,但是我很好奇为什么skip_before_filter似乎忽略了条件,并且总是只跳过before_filter.有没有我失踪的东西?
解决方法
它是一个Rails错误(或至少是一个无证的奇怪行为).在这里跟踪:
https://github.com/rails/rails/issues/9703
在这个线程中,您可以找到(扭曲)解决方案.
代替
skip_before_filter :authenticate_user!,:if => :in_production
写
skip_before_filter :authenticate_user!,:only => :show before_filter :authenticate_user!,:unless => :in_production
它为我工作