use*_*483 5 ruby-on-rails devise
对于我的应用程序,我有几个用户表(franceusers,belgiumusers,...),我想使用一个或另一个取决于我尝试使用table_name_prefix和table_name的域,但它似乎不起作用
class User < ActiveRecord::Base
rolify
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable, #:confirmable,
:recoverable, :rememberable, :trackable, :validatable
def self.table_name
debugger
'franceusers'
end
def self.table_name_prefix
debugger
'france'
end
end
Run Code Online (Sandbox Code Playgroud)
多亏了调试器,我可以看到它被调用但不是self.table_name_prefix.即使调用了self.table_name,也要在表用户而不是franceusers中设计搜索用户
在控制台User.table_name =>"franceusers"
User.table_name_prefix =>"france"
更奇怪的是,我也使用activeadmin,当我浏览用户列表时,我有一个错误:Mysql2 ::错误:'order clause'中的未知列'franceusers.id':SELECT users.*FROM users ORDER BY franceusers.id desc限制30 OFFSET 0
它似乎可以为字段找到table_prefix但不能为FROM找到.
我做坏事吗?是否有另一种方法来更改用户表名?我不能将所有用户表连接成一个,因为它是我老板的指令:-s
谢谢
如果您有不同类型的用户,并且上面要求他们必须位于不同的数据库中,那么我可能会为每个用户创建一个用户类(假设我们正在谈论 5-10 个而不是 100 个)。
有一个 FranceUser 和一个 SpainUser 等。然后将公共设计逻辑提取到可以包含在每个类中的模块中。您还需要覆盖登录/注册/等控制器,以便能够将各个表连接在一起并搜索正确的用户。您还需要跨多个数据库表实现电子邮件唯一性约束等。基本上,这听起来是一个非常糟糕的主意,你将不得不做很多工作,否则你可以通过设计免费获得这些工作。
这是可行的,但我建议您找出您的老板将数据拆分到多个表中的用例,然后找到更好的方法来解决他的问题。它可能只是简单的事情,比如想要简单的报告,并且有比使用 devise 然后覆盖其一半功能更简单、更优雅的方法来解决这些问题。
祝你好运 :)
| 归档时间: |
|
| 查看次数: |
636 次 |
| 最近记录: |