簡體   English   中英

在Rails rake任務中將字符串轉換為模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM