2013-05-06 52 views
1

我有一個很多協會交易模式。其中一個協會是貨幣。交易表和貨幣表都有一個名稱列。現在,我有以下的ActiveRecord查詢:「select column as」如何工作?

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") 

此查詢不工作,其結果是沒有屬性的交易對象的數組。根據IRC上的某個人,「as」部分是不正確的,因爲ORM不知道如何將列分配給屬性(或類似的東西),這足夠公平。我嘗試添加attr_accessor和attr_accessible子句,但它不起作用。

請問我該如何進行上述查詢工作?我期望的結果是一個交易對象數組,deal_name,deal_creation_date等虛擬屬性。

回答

2

最有可能的查詢工作正常,但由於Deal實現inspect方法的方式,返回的交易對象在打印出來時似乎沒有任何屬性。

所以,如果你指定查詢變量的結果,你會看到,這似乎空:

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

雖然示屬性你想要的:

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

更多細節this question

+0

好的,適合我。除了關聯/連接。例如,使用以下查詢:'Deal.joins(:currency).where(「deals.privacy =?or deals.user_id =?」,false,4).select(「deals.name as deal_name,deals.date as deal_date,deal.amount as deal_amount,currency.symbol as currency「)。as_json'。在這個例子中'currency'是'nil',即使它不應該(因爲它在DB中有一個值)。但是,它的價值是一個特殊的特徵。這是問題嗎? – 2013-05-10 17:03:37

+0

這可能是特殊字符導致貨幣問題。您可以嘗試在文件頂部放置'#encoding:UTF-8'。 [這是一個例子](http://stackoverflow.com/a/6916663/1450420)解決什麼可能是類似的問題 – 2013-05-10 18:02:53

+0

我不明白的是,一切工作正常,如果我不使用「作爲「在select語句中(包括json中的特殊字符)。所以我懷疑問題的根源是特殊字符... – 2013-05-10 18:14:25