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

时间:2015-03-21 04:22:18

标签: ruby-on-rails ruby-on-rails-4 activerecord ruby-on-rails-3.2 rails-activerecord

我有一个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

1 个答案:

答案 0 :(得分:0)

它可能与你有

的事实有关

self.table_name = 'user'

您的Partner模型中的

? docs here

如果您尝试做的是Partner类型为User,请考虑ActiveRecord inheritance