2012-12-27 76 views
2

我正在嘗試在所有Rails模型上運行快速Rake任務,但尚未能夠調用它們,因爲這段代碼告訴我無法調用方法columns對一個字符串。將字符串轉換爲Rails Rake任務中的模型

我試過classify,而不是camelize現在也沒有任何合作,試圖將在那裏class_eval爲好,但這麼想的似乎在這裏工作/不知道太多關於它。

task :collect_models_and_field_names => :environment do 

models = Dir.glob("#{models_path}/*").map do |m| 
    m.capitalize.camelize.columns.each { |n| puts n.name } 
end 

我知道這個工作,所以我不得不模型手動訪問,如果我需要,但我真的不希望這樣做...

Model.columns.each { |c| puts c.name } 
+0

@Steph玫瑰和吉里·波斯皮西爾和,當您使用constantize,Rails的告訴我,它預計模型文件來定義模型。這可能與它尚未被調用的事實有關...... – ovatsug25

回答

5

嘗試

Kernel.const_get(m.classify).columns 
1

您可以使用這樣的事情:

models = Dir[Rails.root.join("app", "models", "*.rb")].map do |m| 
    model = File.basename(m, ".rb").classify.constantize 
    model.columns.each { |n| puts n.name } 
end