资料来源:
我的项目正朝着拥有多个数据库(目前在同一台服务器上)的方向发展,我希望能够在这些数据库之间加入.为了做到这一点,我需要将数据库名称添加到表前缀,如下所示:
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.*FROMt_usersLIMIT 1 UserRole加载(84.5ms)SELECTt_user_roles.*FROMt_user_rolesWHEREt_user_roles.user_idIN(1)
使用表名前缀:
SQL(76.8ms)SELECT DISTINCT
DBNAME.t_users.id FROMDBNAME.t_usersLEFT OUTER JOINDBNAME.t_user_roles开DBNAME.t_user_roles.user_id=DBNAME.t_users.id限制1SQL(66.4ms)SELECT
DBNAME. …