我正在推出一个测试版网站,用户群经过挑选.我只想在生产环境中禁用注册,并且只在短时间内禁用(即,我不想完全取消注册).我知道我可以简单地隐藏"注册"链接,但我怀疑比我聪明的黑客仍然可以使用RESTful路由来完成注册.禁用注册的最佳方法是什么,这样我的测试/开发环境仍然可以工作,但生产会受到影响?谢谢你的指点.

我try 过用"注册"转到"登录"的方式指向命名的作用域,但没有成功.以下是我try 过的:

devise_scope :user do
    get "users/sign_in", :to => "devise/sessions#new", :as => :sign_in
    get "users/sign_up", :to => "devise/sessions#new", :as => :sign_up
end

理想情况下,我们会将用户发送到"pages#registration _disabled"页面或类似页面.我只是想找个可以玩的东西.

编辑:

describe "validations" do
    it "should fail registration if in production mode" do
      ENV['RAILS_ENV'] = "production"
      @user = Factory(:user).should_not be_valid
    end
end

它是作为"真实"而不是虚假传递的.有没有办法模拟生产环境?我只是想把这件事搞砸.

谢谢

推荐答案

因为其他人也有我的问题(见我的 comments ).这就是我修复它的方法.我用了murphyslaw的主意.但你也需要确保Deave使用你的新控制器进行注册路由,否则它对你没有多大帮助.

以下是我的控制器覆盖:

class RegistrationsController < Devise::RegistrationsController
  def new
    flash[:info] = 'Registrations are not open yet, but please check back soon'
    redirect_to root_path
  end

  def create
    flash[:info] = 'Registrations are not open yet, but please check back soon'
    redirect_to root_path
  end
end

我添加了一些即时消息,告诉任何无意中发现注册页面的人它为什么不工作.

这是我的routes.rb美元

  if Rails.env.production?
    devise_for :users, :controllers => { :registrations => "registrations" } 
  else
    devise_for :users
  end

控制器散列指定我希望它使用我的覆盖注册控制器.

无论如何,我希望这能节省一些时间.

Ruby-on-rails相关问答推荐

Gemfile需要较新版本的依赖项

错误AESGCMOpen获取密码:消息身份验证失败:Golang解密GCM

是否可以使用 Turbo 帧更新 Rails 表单输入字段值?

带有块捕获的 FormBuilder 辅助方法在 ERB 中不起作用

ruby on rails 中的自定义关联

别名可能与不同模型的相同别名有许多关联?

Rails 3.1 assets资源 - 奇怪的开发服务

如何使用默认的 Rails 记录器记录 Ruby 异常的整个回溯?

在 Rails 的 ActiveRecord 中,touch 有什么用?

如何将 Ruby 哈希转换为 XML?

Rails ActiveRecord 查询日期范围

验证一个对象是否有一个或多个关联对象

如何在 ROR (Ruby) 中显示 PDF?

在rails中带有内部文本或html的link_to image_tag

如何打印出范围之间的随机数?

错误:无法构建 gem 原生扩展 - 安装 mysql2 时出错

Rails - 如何在用户登录时覆盖设计 SessionsController 以执行特定任务?

警告:运行 ruby​​ 或 gem 命令时不安全的世界可写目录

未捕获的 ReferenceError:未定义 ReactDOM

如何获取 Rails 3.1 中assets资源 的绝对 URL?