2010-12-16 14 views
10

テストに使用するRailsモデルにメソッドを追加したいと思います。私がこれを行うと、Railsコンソールや実行時にロードされたファイルでモデルを上書きするのではなく、モデルを上書きします。上記の行の前にv = Model.classのようなものを置くと、新しいメソッドが既存のクラスに正常に追加されます。明らかに、既存のクラスが再オープンされたことを通知するために参照が必要です。Ruby/Rails:再オープンとクラスの上書き

一方、最初に参照することなくFixnumにメソッドを追加することができます。ここで何が起こっているのですか。既存のクラスが上書きされるのではなく再オープンされ、変更されることを保証する通常の方法は何ですか?

ありがとうございました。

答えて

11

使用する前にクラスを要求していないようです。 Model.classと書いて、Modelクラスがないと、Railsは自動的にModelを導入します。 class Modelと書くだけで、それはクラス定義と見なされます。ちょうどrequire 'model'を実行してください。

+0

ありがとう、それは問題でした。 Modelクラスがすでに認識されているのを見たとき、私はそれが「自動的に」認識されただけであることに気付きませんでした。 –

4

class_evalを使用すると、正しい方法でクラスを再度開くことができます。
reopening classesの非常に良い記事です。

+0

ありがとうございます。それは良い記事です。 –

関連する問題