LINUX.ORG.RU

Вопрос об ошибке/-ах валидации моделей с асоциациями

 ,


0

1

я взял тот бложек-пример из «Getting Started with Rails» и сделал 3 мелких изменения: сделал тэг для поста необходимым (presence => true), сказал не отрезать пустые теги (удалил reject blank..) и добавил инспект ошибок в форме создания поста. и получил то чего хотел: пост не создается если не указан тег.

картинка — http://rghost.ru/50169098/image.png

что здесь мне нравится: ошибка после валидации асоциации всплыла/доступна через full_messages.

я тут пишу некое приложение и у меня не получается добиться такого же эффекта.

            p customer.errors.inspect                                           
            p customer.errors.full_messages.inspect                             
            logger.debug('customer errors: ' + customer.errors.to_a.to_s)       
            logger.debug('customer script errors: ' + customer.scripts.last.errors.to_a.to_s)
            logger.debug('instance errors: ' + customer.scripts.last.instances.last.errors.to_a.to_s)
            logger.debug('FM: ' + customer.errors.full_messages.to_s)           

"#<ActiveModel::Errors:0xa7dbbf8 @base=#<Customer id: 3, email: \"1231@ya.ru\", notes: nil, created_at: \"2013-11-14 12:18:55\", updated_at: \"2013-11-14 12:18:55\">, @messages={:scripts=>[\"translation missing: ru.activerecord.errors.models.customer.attributes.scripts.invalid\"]}>"
"[\"Scripts translation missing: ru.activerecord.errors.models.customer.attributes.scripts.invalid\"]"

...
customer errors: ["Scripts translation missing: ru.activerecord.errors.models.customer.attributes.scripts.invalid"]
customer script errors: ["script.errors.e2"]
instance errors: []
FM: ["Scripts translation missing: ru.activerecord.errors.models.customer.attributes.scripts.invalid"]

модель1, модель2

подскажите где подвох?

★★★★★

Последнее исправление: cetjs2 (всего исправлений: 1)

на вопрос «кто виноват» я знаю ответ. все дело в

accepts_nested_attributes_for :tags

Если в бложике-примере его удалить ошибка там тоже пропадет.

теперь отсталось узнать почему метод, который отвечает за работу с nested полями влияет на ошибки?

/извиняюсь за каст/ special-k, Alve, kelyar есть идеи?

ZuBB ★★★★★
() автор топика
Ответ на: комментарий от ZuBB

теперь отсталось узнать почему метод, который отвечает за работу с nested полями влияет на ошибки?

Я прочитал пост два раза, но ничего не понял. Возможно, устал после работы. Можешь как-то кратко сформулировать вопрос?

Alve ★★★★★
()
Ответ на: комментарий от Alve

сам тоже устал. да и вопрос сформулирован достаточно четко имхо. подождем других гуру

ZuBB ★★★★★
() автор топика

customer script errors: [«script.errors.e2»]

#http://pastie.org/pastes/8480109/text

    def ensure_purchased_script_approved                                        
        unless customer.has_confirmed_script?(script.id)                           
            errors.add(:base, 'script.errors.e2') # - вот, что, вероятно, добавило ошибку                              
        end                                                                     
    end

Т.е. условие customer.has_confirmed_script?(... ) не выполнилось.

Смотрим что за условие...

#http://pastie.org/pastes/8480103/text

    def has_confirmed_script?(script_id)                                        
        self.purchases.exists?(:script_id => script_id, :approved => true)      
    end
Т.е. условие self.purchases.exists?(... ) не выполнилось. Выясняй почему.

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 2)
Ответ на: комментарий от special-k

я сам так сдела что оно не выполнилося. вопрос почему эта ошибка отсутсвует в customer.errors.full_messages

update: скорее всего она будет присутствувать если добавить «accept_nested attributes_for scripts». но тогда меня интересует почему «accept_nested attributes_for» так странно влияет на «full_messages». что я собственно и спросил пару постов выше

ZuBB ★★★★★
() автор топика
Последнее исправление: ZuBB (всего исправлений: 2)
Ответ на: комментарий от ZuBB

непонял

А надо больше кулстори, мог бы о себе еще рассказать, фоточки там, как провел лето...

Если в бложике-примере его удалить ошибка там тоже пропадет.

Не «ошибка пропадает», а объект ошибки не попадает в массив full_messages, иначе складывается впечатление, что речь идет о валидации.

почему метод, который отвечает за работу с nested полями влияет на ошибки?
Nested attributes allow you to save attributes on associated records through the parent.

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

special-k ★★★★
()
Последнее исправление: special-k (всего исправлений: 5)
Ответ на: комментарий от special-k

ты пофилософствовать зашел

точно не это.

остальное не осилил. больно поздно. голова не варит. завтра посмотрю

ZuBB ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.