ruby-on-rails – skip_before_filter忽略条件

我正在尝试使用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

它为我工作

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...