2015-10-15 81 views
1

有了一个基本的User注册功能,(例如以下this tutorial)什么是临时启用/生产禁用它的最佳方式?我想要一个简单的开/关开关 - 数据库控制台对我来说没问题。Rails的:暂时禁用用户注册

+0

不要相信这是一个开箱即用的东西。如果您正在编写自定义代码,那么您也必须编写该部分。但我想一个好的选择是在你的控制器中添加一个过滤器,比如'require_logged_in_user',然后你可以通过注释将其禁用。 – sourcx

+0

是的,我怀疑是否有任何开箱即用的东西。我实际上正考虑启用/禁用“用户”控制器的实际注册功能并呈现备用视图。但我不确定这是否会是一种典型的做法......我认为我需要某种模式来保留注册是否启用? –

+0

您可以随时在before_action之后放置一个条件,并调用确认是否需要auth的方法。该方法中的条件可以基于env变量,config变量或db值。 – Swards

回答

1

有多种方式来实现它。

1路线

#config/routes.rb 
resources :sessions if Rails.env.development? 

非常基本的,但工程 - 你可以使用env对象,以确定哪种类型的环境中您当前运行,允许或拒绝相应的路线。


2.控制器级

接下来,您必须控制级的​​功能。

这将使你发布这样的反馈的能力:

#app/controllers/users_controller.rb 
class UsersController < ApplicationController 
    def create 
    redirect_to root_path, notice: "Sorry, you cannot register" if Rails.env.production? 
    end 
end 

3.模型级

最后,模型级。

这将连接到你的数据库。

你可以做这样的事情:

#app/models/option.rb 
class Option < ActiveRecord::Base 
    #columns id | name | value | created_at | updated_at 
    scope :prod_sessions, -> { find_by(name: "prod_sessions").pluck(:value) } 
end 

在你选项表,你可以再添加以下记录:

name: "prod_sessions" 
value: 0 

这样一来,你就可以打电话如下:

if Option.prod_sessions? 
    #do something here 
end 
+0

完美!非常感谢。最后的选择正是我想象的。这是一个常见的解决方案吗 –

+0

WordPress使用它:) https://codex.wordpress.org/Database_Description#Table:_wp_options –

+0

真棒!这对我来说足够了。谢谢! –