2

columnsすべてのRailsモデルでクイックレーキタスクを実行しようとしていますが、このコードから文字列でメソッドを呼び出せないことが示されているため、それらを呼び出すことができませんでした。

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 }
4

3 に答える 3

5

試す

Kernel.const_get(m.classify).columns
于 2012-12-27T15:21:30.587 に答える
3

classify文字列をクラスのように変更するだけです。つまり、大文字とキャメルケースの単数形です。

を使用classifyして文字列をクラス/モデルのように見せた後、を使用する必要がありますconstantize。これは実際に文字列を取得してクラスに変換します。

参照: http ://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-constantize

于 2012-12-27T15:34:59.333 に答える
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
于 2012-12-27T15:26:30.730 に答える