Ruby on Rails: расширение ActiveRecord :: Errors - PullRequest
0 голосов
/ 23 апреля 2010

В Ruby on Rails, куда нужно поместить код из этого фрагмента в http://gist.github.com/376389? Я хочу расширить ActiveRecord :: Errors на код, который там доступен, чтобы я мог объединять сообщения об ошибках.

Это что-то для ApplicationController? или для lib?


Вставить с github.com

# monkey patch gleaned from http://dev.rubyonrails.org/attachment/ticket/11394/merge_bang_errors.patch
module ActiveRecord
  class Errors

    def merge!(errors, options={})
      fields_to_merge = if only=options[:only]
        only
      elsif except=options[:except]
        except = [except] unless except.is_a?(Array)
        except.map!(&:to_sym)
        errors.entries.map(&:first).select do |field|
          !except.include?(field.to_sym)
        end
      else
        errors.entries.map(&:first)
      end
      fields_to_merge = [fields_to_merge] unless fields_to_merge.is_a?(Array)
      fields_to_merge.map!(&:to_sym)

      errors.entries.each do |field, msg|
        add field, msg if fields_to_merge.include?(field.to_sym)
      end
    end
  end
end

Ответы [ 2 ]

4 голосов
/ 23 апреля 2010

Вы можете просто перетащить его в любой файл ruby ​​в каталоге initializers (создайте новый, назовите его как хотите). Rails запускает все файлы там каждый раз, когда он загружается, и в это время будет расширяться Errors.

0 голосов
/ 22 февраля 2013

Этот вопрос устарел, но если вы хотите сделать что-то подобное в rails 3.x, вы можете поместить его в файл в каталоге config / initializers /:

# monkey patch gleaned from http://dev.rubyonrails.org/attachment/ticket/11394/merge_bang_errors.patch

module ActiveModel
  class Errors
    def merge!(errors, options={})
      return if errors.blank? || errors.first.size < 2

      fields_to_merge = if only=options[:only]
        only
      elsif except=options[:except]
        except = [except] unless except.is_a?(Array)
        except.map!(&:to_sym)
        errors.entries.map(&:first).select do |field|
          !except.include?(field.to_sym)
        end
      else
        errors.entries.map(&:first)
      end
      fields_to_merge = [fields_to_merge] unless fields_to_merge.is_a?(Array)
      fields_to_merge.map!(&:to_sym)

      errors.entries.each do |field, msg|
        add field, msg if fields_to_merge.include?(field.to_sym)
      end
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...