微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我正在使用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"}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐