2

Ruby 1.9.2 と Ruby on Rails 3.2.2 を使用しています。次のような状況があります。

class MyClass < ActiveRecord::Base
  include MyModule1
  include MyModule2
  include ...

  # Note: This method statement should override the method mixedin by MyModule1.
  def my_method(*args)
    # ...
  end
end

module MyModule1
  def my_method(*args)
    raise "NotImplementedError - The :my_method is not implemented yet"
  end
end

# /app/views/layouts/application.html.erb
if @my_class.my_method
  All right!
end

ページを参照する Web アプリケーションを開始すると、インクルードされている をオーバーライドしたとしても、エラーが発生します"NotImplementedError - The :my_method is not implemented yet"(上記のコードで読み取ることができます)。クラスの前にビューをロードするために発生しますか? または何?を適切にオーバーライドするには、どのように状況を処理すればよいですか?my_methodMyClassMyModuleMyClassmy_method

4

1 に答える 1

2

ここに示すコード#my_methodMyModule1. def my_methodinのスペルが間違っていないこと、および in がネストされたブロック内などではなく、MyClass実際にブロック内で発生していることを非常に注意深く確認してください。class MyClassclass << self

それでも何も明らかにならない場合は、例外が発生しているコード内の場所に移動し、いくつかのデバッグ用の print ステートメントを追加します。

<% p @my_class.class %>
<% p @my_class.class.ancestors %>

コンソールに表示される内容を確認してください。

于 2012-10-27T15:30:40.140 に答える