“选择列”是如何工作的?

时间:2013-05-06 15:26:41

标签: ruby-on-rails select activerecord

我有一个有很多关联的交易模型。其中一个关联是货币。交易表和货币表都有一个名称列。现在,我有以下ActiveRecord查询:

Deal.
  joins(:currency).
  where("privacy = ? or user_id = ?", false, doorkeeper_token.resource_owner_id).
  select("deals.name as deal_name, deals.date as deal_creation_date, deals.amount as deal_amount, currencies.name as currency_name, currencies.symbol as currency_symbol")

此查询不起作用,其结果是没有属性的Deal对象数组。据IRC的人说," as"部分是不正确的,因为ORM不知道如何将列分配给哪个属性(或类似的东西)足够公平。我尝试添加attr_accessor和attr_accessible子句,但它没有用。

如何让上述查询正常工作?我期望结果是具有deal_namedeal_creation_date等虚拟属性的交易对象数组。

1 个答案:

答案 0 :(得分:2)

查询很可能正常工作,但由于Deal实现inspect方法的方式,返回的Deal对象在打印时似乎没有任何属性。

因此,如果您将查询结果分配给变量,您会看到它显示为空:

v.each do |deal| ; puts deal.inspect ; end

虽然这显示了您想要的属性:

v.each do |deal| ; puts deal.to_yaml ; end

更多详情请见this question