我正在使用 rails 3.2 并设计 2.1 来创建多站点 CMS
要求
可能的解决方案
我一直在寻找并找到了几个解决方案
$ 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)
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 解压缩到您的项目中 # 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
# app/config/routes.rb
devise_for :users, :controllers => {:registrations => "registrations"}
关于ruby-on-rails - 设计多个模型和多个登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14072442/