"git://github.com/DerNalia/deep_cloning.git" 次のエラーが発生している行は次のとおりです。 ActiveRecord::Base.extend(DeepCloning) link to"> "git://github.com/DerNalia/deep_cloning.git" 次のエラーが発生している行は次のとおりです。 ActiveRecord::Base.extend(DeepCloning) link to"> "git://github.com/DerNalia/deep_cloning.git" 次のエラーが発生している行は次のとおりです。 ActiveRecord::Base.extend(DeepCloning) link to" />

なぜ私の宝石は活発な記録を読み込まないのですか?

Here is my gem: https://github.com/DerNalia/deep_cloning

これが私のgemfileに含める方法です:

gem "deep_cloning", :git => "git://github.com/DerNalia/deep_cloning.git"

次のエラーが発生している行は次のとおりです。

ActiveRecord::Base.extend(DeepCloning)

link to source file: https://github.com/DerNalia/deep_cloning/blob/master/lib/deep_cloning.rb

...だから、私は ActiveRecord :: Base を間違って拡張しようとしているのでしょうか?

% bundle exec script/server -p3001
=> Booting WEBrick
=> Rails 2.3.8 application starting on http://0.0.0.0:3001
/Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:443:in `load_missing_constant': uninitialized constant ActiveRecord (NameError)
    from /Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:80:in `rake_original_const_missing'
    from /Users/me/.rvm/gems/[email protected]/gems/rake-0.8.7/lib/rake.rb:2503:in `const_missing'
    from /Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:92:in `const_missing'
    from /Users/me/.rvm/gems/[email protected]/bundler/gems/deep_cloning-4d4df89848a4/lib/deep_cloning.rb:102
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `require'
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
    from /Users/me/.rvm/gems/[email protected]/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
    from /Users/me/Work/GravityLabs/myproject/config/environment.rb:68
    from /Users/me/.rvm/gems/[email protected]/gems/rails-2.3.8/lib/initializer.rb:111:in `run'
    from /Users/me/Work/GravityLabs/myproject/config/environment.rb:16
    from /Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:156:in `require'
    from /Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:156:in `require'
    from /Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:521:in `new_constants_in'
    from /Users/me/.rvm/gems/[email protected]/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:156:in `require'
    from /Users/me/Work/GravityLabs/myproject/config.ru:3
    from /Users/me/.rvm/gems/[email protected]/gems/rack-1.1.3/lib/rack/builder.rb:46:in `instance_eval'
    from /Users/me/.rvm/gems/[email protected]/gems/rack-1.1.3/lib/rack/builder.rb:46:in `initialize'
    from /Users/me/Work/GravityLabs/myproject/config.ru:1:in `new'
    from /Users/me/Work/GravityLabs/myproject/config.ru:1
    from script/server:3:in `eval'
    from /Users/me/.rvm/gems/[email protected]/gems/rails-2.3.8/lib/commands/server.rb:78
    from script/server:3:in `require'
    from script/server:3
1
Active Recordがロードされる前にActiveRecord :: Baseを参照しようとしているようです
追加された 著者 Frederick Cheung,

1 答え

おそらく、 require 'activerecord' をあなたの宝石に入れてみるべきです。


extend include について:

module M
  def a
    "hello"
  end
end

MyClass1.extend M
MyClass1.a #=> "hello"
MyClass.new.a #=> NoMethodError

MyClass2.send :include, M
MyClass2.a #=> NoMethodError
MyClass2.new.a #=> "hello"
1
追加された
しかし、私は「ActiveRecord」を必要とし、私のオブジェクトのどれも.cloneを持っていません!メソッド= \
追加された 著者 NullVoxPopuli,
ディープクロッキングをインクルードすると、インスタンス変数の代わりにクラス変数として使用できるメソッドが得られませんか?目標は、myARObject.clone!(params)= \を実行できるようにすることです。
追加された 著者 NullVoxPopuli,
ああ、私はあなたが例を追加したのを見て、私はそれを試みる必要があります。
追加された 著者 NullVoxPopuli,
おそらく、 ActiveRecord :: Base.send:include、DeepCloning を使うべきでしょうか? extend include はよく誤解される傾向があります。
追加された 著者 Jakub Hampl,
私はあなたがそれを反対に持っていると思います。
追加された 著者 Jakub Hampl,