2013-09-28 48 views
0

我想提出一個耙子任務:編程方式查詢通過活動記錄數據庫表中rake任務

task :populate => :environment do 
    table_array = ActiveRecord::Base.connection.tables #=> ["types","products"] 

    table_array.each do |t| 
     puts t 

     instance_string = t.capitalize.singularize.to_s #=> "Type" (on the first loop) 
     puts Type.column_names #=> ["id", "type_name", "created_at", "updated_at"] 

     # This will return an error, undefined method 'column_names' 
     puts "#{instance_string}".column_names 
    end 
end 

現在,儘管有「類型」的一個實例字符串(第一循環),我可以」用它來編程查詢數據庫。看起來,常量不能以與實例變量和局部變量相同的方式進行評估。我如何以編程方式創建一個列名稱數組?

回答

1

嘗試t.classify.constantize它返回Type作爲一個類,您可以調用方法column_names或任何其他類方法。

瞭解更多關於classifyconstantize

+0

hmm..it的排序工作,但我得到**未初始化的常量類型**錯誤,我認爲這意味着恆不從其數據庫中獲取其屬性表?這是我正在處理的一個耙子任務,但Active Record正在運行,那麼爲什麼會發生這種情況呢? – Starkers

+0

**未初始化的常量類型**意味着'Type'類未在該範圍內定義,'Type.column_names'是否在相同範圍內工作? – tihom

+0

是的,不知道我做錯了什麼。所有工作現在,謝謝! – Starkers