ruby-on-rails - 设计多个模型和多个登录表单

标签 ruby-on-rails ruby-on-rails-3 authentication devise

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

要求

  • 基于站点的 Basecamp 子域。
  • 有 3 个“用户”模型。 1. 管理员( super 用户) 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用于创建邀请。与作者和订阅者不同,管理员不需要根据子域确定范围。

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

    最佳答案

    您不需要使用三个单独的模型来构建此功能。您要查看的是应用于一个 User 模型的 Roles 的概念。

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

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

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

  • 运行 rails generate devise:views将 Devise gem 中的 View 解压缩到您的项目中
  • 创建您自己的注册 Controller :
    # 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 
    
  • 在你的 routes.rb 文件中添加正确的设置来告诉 Devise 使用你的新 Controller :
    # app/config/routes.rb
    devise_for :users, :controllers => {:registrations => "registrations"}
    
  • 关于ruby-on-rails - 设计多个模型和多个登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072442/

    相关文章:

    ruby-on-rails - 将远程 git 存储库添加到当前 git svn 存储库的风险

    ruby-on-rails - 如何在 minitest 中模拟和验证 ActionCable 传输?

    Ruby Mongo 映射器包含 "abc"?

    ruby-on-rails-3 - Rails ERB——将生成的 HTML 内容获取到我可以在 Controller 中访问的变量

    ruby-on-rails-3 - Rails 3,仅查看日期格式?

    php - 保存图像仅在登录时可用

    ruby-on-rails - 如何在 FactoryBot 中设置不是外键的 _id 值?

    ruby-on-rails - 安装 mysql gem 时出错

    authentication - Mojolicious 基本登录

    rest - 具有预配置授权的 OAuth 安全性