5

我正在使用 rails 3.2 并设计 2.1 来创建多站点 CMS

要求

  • 基于站点的 Basecamp 子域。
  • 有 3 个“用户”模型。1. 管理员(超级用户) 2. 作者(每个人在子域上都有自己的站点)和订阅者(​​阅读站点)。
  • 作者:注册是普通的用户名/密码组合,但需要管理员批准。他们的注册表单将有子域字段。
  • 订户:通过邀请电子邮件进行注册。
  • 需要单独的登录和注册表格

可能的解决方案

我一直在寻找并发现很少的解决方案

  • 3 设计中的独立模型:
$ rails generate devise admin 
$ rails generate devise author
$ rails generate devise subscriber

但这会出现以下错误

$ rails generate devise author /home/gaurish/.rvm/gems/ruby-1.9.3-p286-perf/gems/devise-2.1.2/lib/devise/rails/routes.rb:443:in 'raise_no_devise_method_error!': Admin does not respond to 'devise' method. This usually means you haven't loaded your ORM file or it's being loaded too late. To fix it, be sure to require 'devise/orm/YOUR_ORM' inside 'config/initializers/devise.rb' or before your application definition in 'config/application.rb' (RuntimeError)

  • STI:数据库中的单个表并为每个用户类型创建一个模型

     class Admin < User; end
     class Author < User; end
     class Subscriber < User; end

在这里,我不确定这将如何处理不同的登录/注册工作流程。例如,我计划使用devise_invitable创建邀请的订户。与作者和订阅者不同,管理员不需要根据子域来确定范围。

这看起来很复杂吗?我希望我能够很好地解释。

4

2 回答 2

4

您不需要拥有三个单独的模型来构建此功能。您要查看的是应用于一个用户模型的角色概念。

有一个提供此功能的 Gem,称为 Rolify,可在https://github.com/EppO/rolify找到

这将允许您指定哪些用户在哪些角色中,并根据您认为合适的方式更改它们,所有这些都来自一个现有模型。

将角色附加到用户模型后,您可以覆盖 Devise 的注册控制器以检测角色并呈现不同的模板等。您可以通过以下方式执行此操作:

  1. 运行rails generate devise:views以将 Devise gem 中的视图解压缩到您的项目中
  2. 创建您自己的注册控制器:

    # app/controllers/registrations_controller.rb
    class RegistrationsController < Devise::RegistrationsController
      def new
        super
        # Add logic here to detect Role and display different forms
      end
    
      def create
        super
      end
    
      def update
        super
      end
    end 
    
  3. 在你的 routes.rb 文件中添加正确的设置来告诉 Devise 使用你的新控制器:

    # app/config/routes.rb
    devise_for :users, :controllers => {:registrations => "registrations"}
    
于 2012-12-28T17:38:32.007 回答
2

管理员不响应“设计”方法。

这可能是因为您还使用了 activeadmin gem,或者使用了一个名为 Admin 的模块,这会导致名称冲突。尝试将模型重命名为 AdminUser

于 2013-09-26T00:54:55.903 回答