加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 03:22:31 所属栏目:百科 来源:网络整理
导读:我正在使用rails 3.2并设计2.1来创建一个多站点CMS 要求 基于Basecamp子域的站点. 拥有3个“用户”型号. 1.管理员(超级用户)2.作者(每个子域都有自己的站点)订阅者(阅读网站). 作者:注册是普通的用户名/密码组合,但需要得到管理员的批准.他们的注册表格将有
我正在使用rails 3.2并设计2.1来创建一个多站点CMS

要求

>基于Basecamp子域的站点.
>拥有3个“用户”型号. 1.管理员(超级用户)2.作者(每个子域都有自己的站点)&订阅者(阅读网站).
>作者:注册是普通的用户名/密码组合,但需要得到管理员的批准.他们的注册表格将有子域名.
>订阅者:通过邀请电子邮件进行注册.
>需要单独登录&登记表格

可能的解决方案

我一直在寻找和找到了一些解决方

> 3个独立模型:

$rails generate devise admin 
$rails generate devise author
$rails generate devise subscriber

但是这会产生以下错误

$rails生成设计作者
/home/gaurish/.rvm/gems/ruby-1.9.3-p286-perf/gems/devise-2.1.2/lib/devise/rails/routes.rb:443:in’pree_no_devise_method_error!’:管理员没有回复’设计’方法.这通常意味着您尚未加载ORM文件或者加载太晚.要修复它,请确保在’config / initializers / devise.rb’中或在’config / application.rb’中的应用程序定义之前需要’devise / orm / YOUR_ORM'(RuntimeError)

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

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

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

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

解决方法

您不需要使用三个单独的模型来构建此功能.您想要看的是角色的概念,它应用于一个用户模型.

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

这将允许您指定哪些用户在哪个角色中并根据您的需要更改它们,所有这些都来自一个现有模型.

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

>运行rails生成设计:视图将视图从Devise gem解压缩到您的项目中
>创建自己的注册控制器:

# 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使用新的控制器:

# app/config/routes.rb
devise_for :users,:controllers => {:registrations => "registrations"}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读