Как обработать проверку с помощью отношения has_many - PullRequest
2 голосов
/ 12 октября 2009
class Article < ActiveRecord::Base
  has_many :comments
end

class Comment < ActiveRecord::Base
   belongs_to :article
   validates_presence_of :body
   validates_presence_of :author_name
end

Если я оставлю поле author_name пустым, то получаю правильную ошибку проверки Все хорошо.

>> Article.first.comments.create(:body => 'dummy body').errors.full_messages
=> ["Please enter your name"]

Посмотрите на этот пример.

>> a = Article.first
>> a.comments.create(:body => 'dummy body')
>> a.errors.full_messages
["Comments is invalid"]

Я отправляю экземпляр статьи (в данном случае) для просмотра слоя. Мне было интересно, как я могу получить доступ к ошибка цены 'пожалуйста, введите ваше имя' из объекта экземпляра a.

Ответы [ 3 ]

4 голосов
/ 12 октября 2009

Вы можете присвоить вновь созданный комментарий его собственной переменной и также отправить его в представление.

@article = Article.first  
@comment = @article.comments.create(:body => 'dummy body')

Затем вы можете использовать error_messages_for 'article', 'comment' для отображения ошибок для обоих объектов. Я не знаю, есть ли способ автоматически отображать отдельные дочерние ошибки вместо «X недействителен» ...

1 голос
/ 06 июля 2013

Просто дополняя ответ Дэниела, если вы хотите настроить сообщение об ошибке 'Comments is invalid', я нашел способ сделать это через i18n:

# config/locales/en.yml
en:
  activerecord:
    attributes:
      article:
        comments: Comment

Таким образом, вы получите 'Comment is invalid', что синтаксически правильно :) Вы также можете изменить 'is invalid' часть:

# config/locales/en.yml
en:
  activerecord:
    errors:
      models:
        article:
          attributes:
            comments:
              invalid: are invalid

И так вы получите 'Comments are invalid'.

0 голосов
/ 12 октября 2009

Предполагая, что представление является формой, которая пыталась создать объект, вы должны быть в состоянии сделать именно то, что вы сделали выше:

@article.errors.full_messages

Другие представления, у которых есть доступ к объекту (например, представления индекса или представления), не будут иметь ошибок, поскольку этот массив заполняется только при попытке создать или обновить статью.

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