【问题标题】:custom table_name for table users with devise具有设计的表用户的自定义表名
【发布时间】:2013-03-07 14:40:33
【问题描述】:

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

User.table_name_prefix => "法国"

更奇怪的是,我也在使用activeadmin,当我浏览用户列表时,我有一个错误: Mysql2::Error: Unknown column 'franceusers.id' in 'order Clause': SELECT users.* FROM users ORDER BY franceusers.id desc LIMIT 30 OFFSET 0

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

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

谢谢

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

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

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

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

    祝你好运:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2013-02-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多