Направляющие: Избавление от универсальных “X является недопустимыми” ошибками проверки

У меня есть форма регистрации, которая вложила ассоциации/атрибуты вообще, Вы хотите назвать их.

Моя Иерархия - это:

class User < ActiveRecord::Base
  acts_as_authentic
  belongs_to :user_role, :polymorphic => true
end

class Customer < ActiveRecord::Base
  has_one :user, :as => :user_role, :dependent => :destroy
  accepts_nested_attributes_for :user, :allow_destroy => true
  validates_associated :user
end

class Employee < ActiveRecord::Base
  has_one :user, :as => :user_role, :dependent => :destroy
  accepts_nested_attributes_for :user, :allow_destroy => true
  validates_associated :user
end

У меня есть некоторый материал проверки в этих классах также. Моя проблема состоит в том, что, если я пытаюсь создать и Клиент (или Сотрудник и т.д.) с незаполненным бланком, я получаю все ошибки проверки, которые я должен получить плюс некоторые Универсальные как "Пользователь, недопустимый" и "Клиент, недопустимо", Если я выполняю итерации через ошибки, я получаю что-то как:

user.login can't be blank
User is invalid
customer.whatever is blah blah blah...etc
customer.some_other_error etc etc

С тех пор существует по крайней мере одно недопустимое поле во вложенной модели User, дополнительным "X является недопустимое" сообщение, добавляется к списку ошибок. Это становится сбивающим с толку мой клиент и таким образом, я задаюсь вопросом, существует ли быстрый способ сделать это вместо того, чтобы иметь необходимость к файловому серверу через ошибки сам.

8
задан aarona 1 June 2010 в 05:35
поделиться

1 ответ

Используйте метод after_validation

  def after_validation
    # Skip errors that won't be useful to the end user
    filtered_errors = self.errors.reject{ |err| %w{ user User  }.include?(err.first) }
    self.errors.clear
    filtered_errors.each { |err| self.errors.add(*err) }
  end

EDITED

Примечание: -

Добавьте в следующий список, в вашем случае это Пользователь или пользователь. вы можете добавить несколько, если у вас несколько ассоциаций, разделенных пробелом.

%w{ User user }.include?(err.first) #### This piece of code from the above method has logic which reject the errors which won't be useful to the end user
3
ответ дан 5 December 2019 в 18:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: