如何在没有关联的Active Record中选择带有连接方法的列返回?

时间:2015-05-14 08:37:12

标签: mysql ruby-on-rails ruby activerecord

我正在研究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将查询结果映射到我的对象,但是我肯定错过了一些东西并且还没有完全理解这是如何工作的。

编辑:我忘了提及我没有关联的事实,所以我不能使用这个解决方案。

Question

2 个答案:

答案 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