ActiveRecord::Relation返回不同的类对象

4
我有一个Rails 4.2网站应用程序。它具有基于Devise的典型“User”模型,供人们注册、登录和进行操作。
同时,我还有另一个名为“Partner”的模型,它连接到一个名为“Partner_Data”的远程数据库,其中包含一个名为“user”的表格。
在我的rails控制台中,当应该是Partner对象时,我得到了一个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, ...)

我曾试验将Partners_Data数据库中的'user'表名更改为各种名称,例如'partner_user'或'omg_user',以查看表名是否有所不同,但是没有任何变化。

我注意到abc_partner.classabc_asset返回了不同的内容...,分别是Partner::ActiveRecord_RelationAsset::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

1
请问您能否展示至少您的合作伙伴模型,并说明您是如何连接到另一个数据库的。 - Almaron
帖子已更新,包括了这些类。 - Matthew
非常有趣的问题,除非今天有人解决了它,否则我期待下班后研究一下。 - Albin
我稍微尝试了一下。我无法复制这些结果。对我来说,你的代码毫无问题... - Albin
1个回答

0

这可能与您在Partner模型中有

self.table_name = 'user'

有关。文档在此处

如果您想让Partner成为User的一种类型,则考虑使用ActiveRecord 继承


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接