3

私が書いたプラグインに奇妙な問題があります。変わったのは、さまざまなActiveRecordクラスを開く別のプラグインが1つあり、自動リロードに問題はないということです。私は開発モードでプラグインが再ロードされない

User.class_eval do 
    has_one :reputation 
    include Karma 
    alias :rep :reputation 
end 

を持っているプラ​​グインinit.rbファイルで

私は本番モードまたはレールコンソールでそれを実行した場合は問題がありません。私はそれを一度ロードしますが、私はサーバーを再起動しない限り、開発でそれを実行するとき。

私は(acts_as_readable)を使用している他のプラグインで特別なものを見つけられず、同じ方法でユーザーを開きます。


編集:

私がやった:plugiinのinit.rbファイル内

ActiveRecord::Base.class_eval do 
    class << self 
    def has_karma_values 
     has_one :reputation 
     alias :rep :reputation 
    end 
    end 
end 

とは

class User < ActiveRecord::Base 
... 
has_karma_values 
... 
end 

を行なったし、存在しないhas_karma_valuesについても同じエラーを取得します。プラグインはこの時点でロードされていません。混乱している何

は行為-として可読が

User.class_eval do 
    has_many :readings 
end 

ActiveRecord::Base.send :include, ActiveRecord::Acts::Readable 

では全く問題ありませんが、まだ地雷がないことです。ここで

は私の完全なinit.rbファイル

ここ
require 'reputation' 
require 'karma_name' 
require 'karma_tag' 
require 'karma_title' 
require 'acts_as_karmable' 
require 'karma' 
require File.expand_path('../lib/generators/karma_generator', __FILE__) 

KarmaTitle.setup 'Default' 

ActiveRecord::Base.class_eval do 
    class << self 
    def has_karma_values 
     has_one :reputation 
     alias :rep :reputation 
    end 
    end 
end 

ActiveRecord::Base.send :include, ActiveRecord::Acts::Karmable 

でエラー/home/david/apps/ruby/lib/ruby/gems/1.9.1/gems/activerecord-3.0.9/lib/active_record/base.rb:1014:in method_missing 'です:初期化ファイルを一度ロードされている未定義のローカル変数やメソッドhas_karma_values' for #<Class:0x9ad1b24> (NameError)

答えて

5

これは動作するはずです:あなたの応答のための

# plugin init.rb 
Rails.configuration.to_prepare do 
    User.class_eval do 
    has_one :reputation 
    include Karma 
    alias :rep :reputation 
    end 
end 
+0

それは問題を解決したようです、ありがとうございます。これは生産現場で重複ロードを引き起こすでしょうか?私はまだacts_as_readableがこの小さなハックを必要としない理由を知りたいです。非常に奇妙な不一致。 – david

+0

'#to_prepare'は各要求/応答サイクルの開始時に開発時に呼び出され、初期化の直後には1回だけ生成時に呼び出されます。 – yfeldblum

+0

ありがとうございます。 – david

3

、あなたはあなたのモデルにアクセスするべきではありませんあなたのプラグインから、それは別の方法でなければなりません、あなたのinitファイルはおそらくこのようになります:

ActiveRecord::Base.class_eval do 
    class << self 
    def acts_as_readable 
     has_one :reputation 
     include Karma 
     alias :rep :reputation 
    end 
    end 
end 

user.rbファイルには、あなたはこのようにそれを実行する必要があります。

class User < ActiveRecord::Base 
    acts_as_readable 
end 

そして、これはあなたが期待する機能を与える必要があります。

+0

感謝を。私はそれを働かせることができませんでした、それは以前と同じエラーがあります。私はOPの編集として詳細を追加しました。 – david

+0

問題を見る別の方法を教えてくれてありがとう。 – david

関連する問題