[英]convert string to model in Rails rake task
我試圖在我的所有Rails模型上運行快速rake任務但是無法調用它們,因為這段代碼告訴我我不能在字符串上調用方法columns
。
我嘗試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 }
嘗試
Kernel.const_get(m.classify).columns
classify
只是改變字符串看起來像一個類 - 即用大寫字母和camelcase,單數。
在使用classify
使字符串看起來像類/模型之后,您需要使用constantize
,它實際上接受字符串並將其轉換為類。
請參閱: http : //api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-constantize
你可以使用這樣的東西:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.