具有设计的表用户的自定义table_name

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

谢谢

Nic*_*ick 0

如果您有不同类型的用户,并且上面要求他们必须位于不同的数据库中,那么我可能会为每个用户创建一个用户类(假设我们正在谈论 5-10 个而不是 100 个)。

有一个 FranceUser 和一个 SpainUser 等。然后将公共设计逻辑提取到可以包含在每个类中的模块中。您还需要覆盖登录/注册/等控制器,以便能够将各个表连接在一起并搜索正确的用户。您还需要跨多个数据库表实现电子邮件唯一性约束等。基本上,这听起来是一个非常糟糕的主意,你将不得不做很多工作,否则你可以通过设计免费获得这些工作。

这是可行的,但我建议您找出您的老板将数据拆分到多个表中的用例,然后找到更好的方法来解决他的问题。它可能只是简单的事情,比如想要简单的报告,并且有比使用 devise 然后覆盖其一半功能更简单、更优雅的方法来解决这些问题。

祝你好运 :)