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
警告!!!
これは非常に一時的な(そして壊れやすい)モンキーパッチであり、実際にこのようなコードを本番環境で使用することはお勧めしません。
より良いオプションは、これに別の宝石を見つけ、作成者と協力して修正し、プロジェクトをフォークして自分で修正してから、プロジェクトでそのフォークを使用するか(詳細)、または単にローカルでこの機能を再構築することです。出発点としての宝石。