我有一个Rails 4.2 webapp。它具有基于User
的典型Devise
模型,供人们注册,登录和完成他们的工作。
与此同时,我有另一个名为Partner
的模型,它连接到一个名为Partner_Data
的远程数据库,其中包含一个名为“user
”的表。
在我的rails控制台中,当我应该成为合作伙伴时,我会收到User
课程的对象。关于发生了什么的任何想法?
> abc_partner = Partner.where(id:200)
=> #<ActiveRecord::Relation [#<User id: 262, email: "abc@abc.xyz", created_at: ...>]>
> abc_partner.class
=> Partner::ActiveRecord_Relation
> abc_partner.first.class
=> User(id: integer, email: string, encrypted_password: string ... )
我已经完成的临时修复是
abc_partner.becomes(Partner)
=> #<Partner id:262 name: 'John Doe', partners_since:'2013-03-19', location:'New York, NY', company:'ABCD Corp.'>
但是:我还有一个Asset
模型,它也连接到同一个远程数据库,使用同名的表“asset
”,我得到了一些有用的东西:
> abc_asset = Asset.where(id:101)
=> #<ActiveRecord::Relation [#<Asset id: 213, name: "arc", description: "My arc", created_at: "2015-03-13", owner_login: "John Doe", ...>]>
> abc_asset.class
=> Asset::ActiveRecord_Relation
> abc_asset.first.class
=> Asset(id: integer, name: string, description: text, created_at: datetime, ...)
我已尝试将user
数据库的名称“Partners_Data
”更改为“partner_user
”或“omg_user
”等各种内容,以查看是否有表格名称有所作为,没有任何改变。
我注意到abc_partner.class和abc_asset都返回了不同的东西......,Partner :: ActiveRecord_Relation和Asset :: ActiveRecord_Relation ......
类:
class Partner < ActiveRecord::Base
establish_connection(:my_partners_db)
self.table_name = 'user'
belongs_to: :partner_list
end
class Asset < ActiveRecord::Base
establish_connection(:my_partners_db)
self.table_name = 'asset'
end
在database.yml
:
my_partners_db:
adapter: mysql
encoding: utf8
host: 1.1.1.1
database: partner_data
username: some_username
password: some_password
pool: 7
port: 3317
答案 0 :(得分:0)
它可能与你有
的事实有关 self.table_name = 'user'
Partner
模型中的? docs here
如果您尝试做的是Partner
类型为User
,请考虑ActiveRecord inheritance。