Cra*_*uff 7 multi-tenant devise ruby-on-rails-3
我正在使用acts_as_tenant gem来管理多租户,而我正在使用devise来管理用户.
我只为租户设置了用户模型和帐户模型.我可以针对多个租户创建用户 - 这一切都正常工作除了当我尝试使用相同的电子邮件创建两个用户对不同的租户ID时,我得到了一个单一性错误.我正在使用所述的validates_uniqueness_to_tenant选项.
用户模型
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
acts_as_tenant(:account)
validates_uniqueness_to_tenant :email
end
Run Code Online (Sandbox Code Playgroud)
帐户模型
class Account < ActiveRecord::Base
attr_accessible :name
end
Run Code Online (Sandbox Code Playgroud)
应用控制器
class ApplicationController < ActionController::Base
set_current_tenant_by_subdomain(:account, :subdomain)
protect_from_forgery
end
Run Code Online (Sandbox Code Playgroud)
看起来它应该基于acts_as_tenant中的所有文档工作,我是否需要在设计级别覆盖某些内容?
编辑:经过一些头疼和一点休息后,问题是我相信,因为默认情况下,Devise为电子邮件列添加了一个唯一索引.这显然不会影响act_as_tenant想做什么...我会尝试删除索引,看看Devise是否呕吐.
编辑2:好的,现在已经正式放弃了.我对主站点进行了手动滚动身份验证,这与acts_as_tenant一起正常运行.我只能假设在某个层面上acts_as_tenant和Devise之间存在一些不兼容性 - 除了我在这个阶段找到它.
唯一的方法是从设计中删除validatable模块并运行您自己的验证,如下所示:
class User < ActiveRecord::Base
acts_as_tenant :account
attr_accessible :email, :password, :remember_me
#remove :validatable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable
#run own validations
#I've omitted any emailformatting checks for clarity's sake.
validates :email,
presence: true,
uniqueness: { scope: :account_id, case_sensitive: false }
validates :password,
presence: true,
length: { :in => 6..20 },
:if => :password_required?
protected
# copied from validatable module
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2074 次 |
| 最近记录: |