我正在研究Rails模型,它映射到外部(非默认)数据库表。
我需要进行连接以获取实例化对象所需的数据。
我正在使用有效记录的功能:
self.joins("LEFT OUTER JOIN accounts ON accounts.code = customers.code").select("customers.code, accounts.email, accounts.firstname, accounts.password_hash").where('accounts.code = ?', my_param)[0]
模型类是:
class User::Customer < User
self.establish_connection :external_db
self.table_name = "customers"
attr_accessor :password_hash
attr_accessor :firstname
attr_accessor :email
end
这是它的查询:
SELECT customers.code, accounts.email, accounts.firstname, accounts.password_hash FROM `customers` LEFT OUTER JOIN accounts ON accounts.code = customers.code WHERE (accounts.code = '11111111')
所以查询是对的,但是我的对象:
#<User::Customer id: nil, code: "11111111">
只有其表的属性。 我期望这样,因为我设置了其他属性的attr_accessor,Rails将查询结果映射到我的对象,但是我肯定错过了一些东西并且还没有完全理解这是如何工作的。
编辑:我忘了提及我没有关联的事实,所以我不能使用这个解决方案。
答案 0 :(得分:0)
是的,没有在对象的检查中显示。但是删除所有 should trigger any message (FAILED - 1)
Failures:
1) product.delete should trigger any message
Failure/Error: expect(event.dispatch).to trigger_message :any
expected product.delete to trigger message with some data, instead it did not trigger any message
# ./spec/requests/product.rb:11:in `block (3 levels) in <top (required)>'
和attr_accessor
对象(例如User::Customer
),请尝试指定已连接表的列名。像这样,
@user
它会给你结果。
答案 1 :(得分:0)
让attr_accessor
您可以通过以下方式获取属性:
@user.email
您需要指定一个to_s
实例方法来实现您的目标:
class User::Customer < User
#...
def to_s
"#{password_hash}, #{firstname}, #{email}"
end
end