2012-06-01 73 views
3

我必須爲舊手機應用程序生成json訂閱源,並且某些標籤需要與我的數據庫列名稱不同。Rails數據庫查詢 - 是否可以給一個列別名?

我認爲這樣做的最有效方法是在數據庫級別創建一個別名。所以我做這樣

Site.where(mobile_visible: true).select("non_clashing_id AS clientID") 

產生的SQL

SELECT non_clashing_id AS clientID FROM `sites` WHERE `sites`.`mobile_visible` = 1 ORDER BY site_name 

如果我運行MySQL工作臺此查詢它產生一列,標題爲ClientID如我所料,與所需的值的東西。

但是,如果我告訴物體在軌道查看我得到{"clientID":null},{"clientID":null},{"clientID":null}

我在做什麼錯?有沒有更好的方法來做到這一點?

回答

1

我認爲,在默認情況下,activerecord負荷列定義。而且,它應該只將值加載到現有的列中。

Site.columns 

我想你可以再添加一個項目到該數組。或者你可以使用正常的查詢,而無需別名列名,然後加入alias_attribute像MurifoX沒有和覆蓋as_json方法:

class Site < ActiveRecord::Base 
    alias_attribute :client_id, :non_clashing_id 

    def as_json(options={}) 
    options[:methods] = [:client_id] 
    options[:only] = [:client_id] 
    super 
    end 
end 
1

嘗試把這個模型中,除了數據庫別名:從數據庫

class model < ActiveRecord::Base 
    alias_attribute :non_clashing_id, :client_id 
    ... 
end 
2

這顯示瞭如何訪問變量

sites = Site.where(mobile_visible: true).select("non_clashing_id AS clientID") 
sites.each do |site| 
    puts site.clientID 
end 
+0

你能接受的答案嗎? – Anil

相關問題