Пользовательское сообщение об ошибке проверки рельсов игнорируется / не отображается .. почему? - PullRequest
1 голос
/ 14 декабря 2011

Мое пользовательское сообщение для проверки уникальности области не отображается.

Я включаю то, что считаю соответствующим кодом, но, пожалуйста, дайте мне знать, если вы считаете, что есть еще что-то, что вам может понадобиться увидеть.

class Beverage < ActiveRecord::Base
  has_many :grapeages, dependent: :destroy
  has_many :wine_varietals, through: :grapeages
  validates_associated :grapeages
end

class Grapeage < ActiveRecord::Base
  belongs_to :beverage
  belongs_to :wine_varietal

  # Neither of these seem to work:
  #validates :wine_varietal_id, uniqueness: {scope: :beverage_id, message: 'xxx'}
  validates_uniqueness_of :wine_varietal_id, scope: :beverage_id, message: 'xxx'
end

Вместо 'xxx' отображается сообщение об ошибке:

Grapeages is invalid

1 Ответ

2 голосов
/ 17 декабря 2011

Я нашел решение после поиска около validates_associated .. мои поиски привели меня к 3668018 , и я проследил за его первым сообщением , что обеспечивает хорошее исправление для фактав настоящее время validates_associated переопределяет фактические сообщения об ошибках с помощью [Модель] недействительна .Как бонус , эта же ссылка показывает хороший способ удаления дубликатов сообщений об ошибках (обратите внимание, что класс должен быть обновлен до ActiveModel::Errors).

# config/initializers/validation_fixes.rb
module ValidatesAssociatedAttributes
  module ActiveRecord::Validations::ClassMethods
    def validates_associated(*associations)
      class_eval do
        validates_each(associations) do |record, associate_name, value|
          (value.respond_to?(:each) ? value : [value]).each do |rec|
            if rec && !rec.valid?
              rec.errors.each do |key, value|
                record.errors.add(key, value)
              end
            end
          end
        end
      end
    end
  end
end

# remove duplicate error messages
class ActiveModel::Errors
  alias old_full_messages full_messages
  def full_messages
    old_full_messages.uniq
  end
end

Не забудьтеперезагрузить сервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...