0

completeness-fuというgemをインストールしています。

これは私が得るエラーです:

completeness-fu-0.6.0/lib/completeness-fu/active_model_additions.rb:12:in `define_completeness_scoring': please make sure ActiveModel::Naming is included so completeness_scoring can translate messages correctly (CompletenessFu::CompletenessFuError)

どういう意味ですか?

4

1 に答える 1

0

ActiveModel::Naming #model_nameオブジェクトにメソッドを作成します。完全性-fugemは#define_completeness_scoringメソッドにそれを必要とするようです。

READMEから:

完全性-Fuは以前はActiveRecord専用でしたが、これは最新バージョンで変更され、宝石の依存関係としてActiveModelのみが必要になりました(そして少しActiveSupportが必要です)。これは、最新バージョンが次のORMで動作することを意味します。

  • ActiveRecord
  • Mongoid
  • カサンドラオブジェクト

define_completeness_scoring methodデフォルトで上記のORMに混合されますがActiveModel、上記のORMのいずれでもないモデルでCompleteness-Fuを使用する場合は、必ずを含めてくださいActiveModel::Naming。完全性スコアをキャッシュする場合は、ActiveModel::Validationsとも含めるようにしてくださいActiveModel::Validations::Callbacks

更新しました

コメントを参照してください。根本的な問題は宝石のバグのようです(2011年6月29日現在)。これは、次のコードを使用してモンキーパッチを適用できます(Ruby 1.9を想定)。唯一の変更はself.singleton_class.include?(ActiveModel::Naming)、適切な応答を得るために使用することです。

# lib/completeness-fu.rb
module CompletenessFu
  module ActiveModelAdditions
    def self.included(base)
      base.class_eval do
        def self.define_completeness_scoring(&checks_block)
          # The check below is causing the problem; the simplest fix in Ruby 1.8
          # would be to simply remove it by commenting out the following 3 lines.
          unless self.singleton_class.include?(ActiveModel::Naming)
            raise CompletenessFuError, 'please make sure ActiveModel::Naming is included so completeness_scoring can translate messages correctly'
          end

          class_inheritable_array :completeness_checks
          cattr_accessor :default_weighting
          cattr_accessor :model_weightings

          self.send :extend, ClassMethods
          self.send :include, InstanceMethods

          checks_results = CompletenessFu::ScoringBuilder.generate(self, &checks_block)

          self.default_weighting   = checks_results[:default_weighting]
          self.completeness_checks = checks_results[:completeness_checks]
          self.model_weightings    = checks_results[:model_weightings]

          if checks_results[:cache_score_details]
            unless self.include?(ActiveModel::Validations::Callbacks)
              raise CompletenessFuError, 'please make sure ActiveModel::Validations::Callbacks is included before define_completeness_scoring if you want to cache competeness scoring'
            end
            self.before_validation checks_results[:cache_score_details]
          end
        end
      end
    end
  end
end

警告!!!

これは非常に一時的な(そして壊れやすい)モンキーパッチであり、実際にこのようなコードを本番環境で使用することはお勧めしません。

より良いオプションは、これに別の宝石を見つけ、作成者と協力して修正し、プロジェクトをフォークして自分で修正してから、プロジェクトでそのフォークを使用するか(詳細)、または単にローカルでこの機能を再構築することです。出発点としての宝石。

于 2011-06-28T06:03:02.600 に答える