小编raj*_*aja的帖子

Rails 3向表中添加数据库名称包括默认为eager load

资料来源:

我的项目正朝着拥有多个数据库(目前在同一台服务器上)的方向发展,我希望能够在这些数据库之间加入.为了做到这一点,我需要将数据库名称添加到表前缀,如下所示:

class FirstBase < ActiveRecord::Base
    def self.table_name_prefix
        "DBNAME.t_"
    end

    establish_connection :firstdb
end

class User < FirstBase
    has_many :user_roles
end

class UserRole < FirstBase
    belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

添加表名前缀似乎会影响同一查询上包含的默认行为,即使在同一个数据库中也是如此.考虑User.includes(:user_roles).first

没有表名前缀:

用户加载(67.1ms)SELECT t_users.*FROM t_usersLIMIT 1 UserRole加载(84.5ms)SELECT t_user_roles.*FROM t_user_rolesWHERE t_user_roles.user_idIN(1)

使用表名前缀:

SQL(76.8ms)SELECT DISTINCT DBNAME.t_users.id FROM DBNAME.t_usersLEFT OUTER JOIN DBNAME.t_user_rolesDBNAME.t_user_roles.user_id= DBNAME.t_users.id限制1

SQL(66.4ms)SELECT DBNAME. …

activerecord ruby-on-rails ruby-on-rails-3

10
推荐指数
1
解决办法
389
查看次数