5

对于我的应用程序,我有几个用户表(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

感谢调试器,我可以看到它被调用但不是 self.table_name_prefix。即使调用 self.table_name,也要在表用户而不是 franceusers 中设计搜索用户

在控制台 User.table_name => "franceusers"

User.table_name_prefix => "法国"

更奇怪的是,我也在使用activeadmin,当我浏览用户列表时,出现错误:Mysql2::Error: Unknown column 'franceusers.id' in 'order Clause': SELECT users.* FROM users ORDER BY franceusers.id desc限制 30 偏移量 0

似乎它可以找到字段的 table_prefix 但不能找到 FROM。

我做了什么坏事吗?还有其他方法可以更改用户表名吗?我不能将所有用户表合并为一个,因为这是我老板的指示:-s

谢谢

4

1 回答 1

0

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

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

这是可行的,但我建议你找出你的老板有什么用例将你的数据分成多个表,然后找到更好的方法来解决他的问题。它可能只是像想要简单的报告一样简单,并且有比使用设计然后覆盖其一半功能更简单和更优雅的方法来解决这些问题。

祝你好运 :)

于 2015-07-02T22:00:51.787 回答