我正在尝试在我的所有Rails模型上运行快速rake任务,但无法调用它们,因为这段代码告诉我我无法在字符串上调用方法columns
我尝试了classify
而不是camelize
,它也没有用,尝试在那里插入一个class_eval
,但这似乎不起作用/ don'我对此知之甚多。
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 :(得分:5)
尝试
Kernel.const_get(m.classify).columns
答案 1 :(得分:3)
classify
只是将字符串更改为类似 - 即使用大写字母和camelcase,单数。
使用classify
使字符串看起来像类/模型之后,需要使用constantize
,它实际上接受字符串并将其转换为类。
请参阅: http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-constantize
答案 2 :(得分: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