2012-09-07 30 views
2

我有2個車型類別和第三條有關這樣取COUNT(列)在與A組查詢的整數在Rails 3中

class Category < ActiveRecord::Base 
    has_many :articles 
end 

class Article < ActiveRecord::Base 
    belongs_to :category 

    def self.count_articles_per_category 
    select('category_id, COUNT(*) AS total').group(:category_id) 
    end 
end 

我訪問count_articles_per_category這樣

Article.count_articles_per_category 

它將返回包含2列的文章:category_id和total。

我的問題是,總列是一個字符串。所以問題是:是否有一個方法來獲取該列作爲一個整數? PS:我試圖在數據庫中爲COUNT(*)進行強制轉換,但這並沒有幫助。 我會盡量避免做這樣的事情:

articles = Article.count_articles_per_category 
articles.map do |article| 
    article.total = article.total.to_i 
    article 
end 

回答

1

不,不支持ActiveRecord自動轉換數據類型(它們總是作爲字符串傳輸到數據庫)。

的方式ActiveRecord作品時,檢索項目是:

  • ActiveRecord模型中的每個屬性,檢查列的類型,並且將數據轉換爲該類型。
  • 對於額外的列,它不知道應該將其轉換爲什麼數據類型。

額外的列包含來自其他表或表達式的列。


您可以使用不同的查詢,如:

Article.group(:category_id).count 
Article.count(:group => :category_id) 

這些返回:category_id => count的哈希值。所以你可能會得到類似{6=>2, 4=>2, 5=>1, 2=>1, 9=>1, 1=>1, 3=>1}

使用count方法的工作原理是因爲它隱式讓ActiveRecord知道它是一個整數類型。

+0

是否有可能告訴ActiveRecord計數列的類型? – panzi

1

Article.group(:category_id).count可能給你的東西,你可以使用。這將返回一個散列,其中每個鍵表示category_id,每個值表示相應的計數爲整數。