0

Rails 3 で Collective Idea のMoney Gemを使用して "sanitize" メソッドを呼び出すと、メソッドが見つからないというエラーが発生する

sanitize "trololo"

=>

undefined method `id2name' for {:instance_writer=>false}:Hash

collectiveidea-money (1.7.4) lib/support/cattr_accessor.rb:7:in `block in cattr_reader'
collectiveidea-money (1.7.4) lib/support/cattr_accessor.rb:5:in `each'
collectiveidea-money (1.7.4) lib/support/cattr_accessor.rb:5:in `cattr_reader'
collectiveidea-money (1.7.4) lib/support/cattr_accessor.rb:54:in `cattr_accessor'
actionpack (3.2.8) lib/action_controller/vendor/html-scanner/html/sanitizer.rb:48:in `<class:LinkSanitizer>'
actionpack (3.2.8) lib/action_controller/vendor/html-scanner/html/sanitizer.rb:47:in `<module:HTML>'
actionpack (3.2.8) lib/action_controller/vendor/html-scanner/html/sanitizer.rb:5:in `<top (required)>'
actionpack (3.2.8) lib/action_view/helpers/sanitize_helper.rb:174:in `white_list_sanitizer'
actionpack (3.2.8) lib/action_view/helpers/sanitize_helper.rb:60:in `sanitize'

以前にこのエラーを経験した人はいますか?

4

1 に答える 1

4

ソースコードを掘り下げた後、私はこれを見つけました: money gem はcattr_accessorヘルパーメソッドを定義します (ファイル YOUR_GEM_DIR/collectiveidea-money-1.7.4/lib/support/cattr_accessor.rb を参照)。 -3.2.8/lib/active_support/core_ext/class/attribute_accessors.rb)。

残念ながら、money gem の実装は active_support のものとは異なります。そしてあなたの場合、お金の宝石はactive_supportの後にロードされ、*良い* active_support実装を上書きしました。

money gemがactive_supportの前にロードされていることを確認することで、「修正」できます。アプリケーションの詳細を投稿していただければ、その方法をお伝えできます...

ただし、money gem はかなり古くなっているように思われるので、より新しく積極的にメンテナンスされているものに置き換えることをお勧めします...

于 2012-10-31T18:09:29.327 に答える