почему я получаю эту ошибку: пожалуйста, убедитесь, что ActiveModel :: Naming включен - PullRequest
0 голосов
/ 28 июня 2011

Я устанавливаю драгоценный камень под названием завершенность-фу.

Это ошибка, которую я получаю:

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)

Что это значит?

1 Ответ

0 голосов
/ 28 июня 2011

ActiveModel::Naming создает метод #model_name для вашего объекта . Похоже, что драгоценность завершенности фу требует его для метода #define_completeness_scoring.

Из readme :

Completeness-Fu имел обыкновение быть только для ActiveRecord, но это изменилось с последней версией с только ActiveModel, необходимым как зависимость драгоценного камня (и немного ActiveSupport). Это означает, что последняя версия работает со следующими ORM:

  • ActiveRecord
  • Mongoid
  • Кассандра Объект

По умолчанию define_completeness_scoring method смешивается с вышеупомянутыми ORM, но если вы хотите использовать Completeness-Fu в модели ActiveModel, которая не является одной из вышеуказанных ORM, убедитесь, что вы включили ActiveModel::Naming. Если вы хотите кэшировать показатель полноты, убедитесь, что вы также включили ActiveModel::Validations и ActiveModel::Validations::Callbacks.

Обновлено

см. Комментарии; основная проблема, кажется, ошибка в драгоценном камне (по состоянию на 29 июня 2011 года). Это может быть исправлено обезьяной с помощью следующего кода (при условии, что 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

Внимание !!!

Это супер-временный (и хрупкий) патч обезьяны, и я действительно не рекомендую на самом деле использовать подобный код в производственном режиме.

Лучшим вариантом было бы найти для этого другой драгоценный камень, поработать с автором, чтобы исправить его, раскошелиться на проект и исправить его самостоятельно, затем использовать этот форк в своем проекте ( больше информации ) или просто восстановите эту функциональность в своем приложении локально, используя гем в качестве начального дизайна.

...