いくつかのモデルを含むエンジンスタイルのプラグインにいくつかのコードがあります。私のアプリでは、これらのモデルの1つを拡張したいと考えています。私は、イニシャライザ内からモジュールを組み込むことによって、問題のモデルにインスタンスメソッドとクラスメソッドの両方を追加することができました。モジュールを使用して "has_many"プラグインでモデルを拡張します
しかし、アソシエーション、コールバックなどを追加できないようです。「メソッドが見つかりません」というエラーが表示されます。私はこれが
module Qwerty
module Core
module Extensions
module User
# Instance Methods Go Here
# Class Methods
module ClassMethods
def relate
has_many :hits, :uniq => true # no method found
before_validation_on_create :generate_code # no method found
end
def something # works!
"something"
end
end
def self.included(base)
base.extend(ClassMethods).relate
end
end
end
end
end
を動作するはずです古いコードが間違っている原因であると考え
/libs/qwerty/core.rb
module Qwerty
module Core
module Extensions
module User
# Instance Methods Go Here
# Class Methods
module ClassMethods
has_many :hits, :uniq => true # no method found
before_validation_on_create :generate_code # no method found
def something # works!
"something"
end
end
def self.included(base)
base.extend(ClassMethods)
end
end
end
end
end
/initializers/qwerty.rb
require 'qwerty/core/user'
User.send :include, Qwerty::Core::Extensions::User
Gotcha:「リロードしています!コンソールではクラスがリロードされますが、私の場合はモジュールがイニシャライザから呼び出されるため、モジュールは再適用されません。 – Kris
さらに、現時点では、コンソールの使用時にモジュール内のコードが表示されるだけで、コントローラから同じコードが呼び出されたときにエラーが発生します。私はコード例を掲載したいと思いますが、答えは正しくないようです(これは結局フォーラムではありません)。 – Kris
CONTROLLER:render:text => User.new.respond_to?( 'ヒット' => false CONSOLE:User.new.respond_to?( 'ヒット')#=> true PREEMPT:サーバーをリブートしました:) – Kris