1

すべてのプロジェクトでモジュールを一度に有効にするために、RedmineRubyアプリで実行する必要のあるRubyコードがいくつかあります。

驚いたことに、rubyはプロジェクトにアクセスしますが、各「プロジェクト」オブジェクト内のいくつかの特定のメソッドにアクセスすると、NoMethodErrorが発生します。

コードは次のとおりです。

Project.find(:all).each do |project|

  print "Enabling modules for project '#{project.identifier}' ... "

  puts project.methods.sort            # this does print "enabled_module_names"
  puts project.enabled_module_names

end

これは次の場合に失敗します。

hostname:/srv/apps/redmine# script/runner  vendor/plugins/customplugin/lib/enable_modules.rb
/var/lib/gems/1.8/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:260:in `method_missing': undefined method `enabled_module_names' for #<Project:0x7f28985c1cb0> (NoMethodError)
    from vendor/plugins/customplugin/lib/enable_modules.rb:14
    from vendor/plugins/customplugin/lib/enable_modules.rb:7:in `each'
    from vendor/plugins/customplugin/lib/enable_modules.rb:7
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `eval'
    from /var/lib/gems/1.8/gems/rails-2.3.5/lib/commands/runner.rb:46
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/lib/ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from script/runner:3

私は頭を悩ませてきましたが、特に「project.methods」が実際に「enabled_module_names」をリストしているため、コードが「Project」シンボルを検出するのに、その中のメソッドを検出しない理由を理解できません。

どんな助けでも大歓迎です。

4

1 に答える 1

2

enable_module_names がインスタンス メソッドであることは確かですか?

以内Project.instance_methodsですか?

編集(以下のコメントの要約):

以前のバージョンでは、次を使用する必要があります。

enabled_module_names = project.enabled_modules.collect(&:name)

ゲッターはそれ以降のバージョンにのみ存在します (この変更の詳細については、rev.4460を参照してください)。

于 2012-11-20T11:50:22.970 に答える