У меня есть форма регистрации, которая вложила ассоциации/атрибуты вообще, Вы хотите назвать их.
Моя Иерархия - это:
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 является недопустимое" сообщение, добавляется к списку ошибок. Это становится сбивающим с толку мой клиент и таким образом, я задаюсь вопросом, существует ли быстрый способ сделать это вместо того, чтобы иметь необходимость к файловому серверу через ошибки сам.
Используйте метод 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