Как мне вызвать проверку дочернего обновления в Rails? - PullRequest
0 голосов
/ 28 марта 2020

Если у меня есть две модели, модель «Пользователь» и «Пост», где они связаны с ассоциацией «есть много» (у пользователя много постов), могу ли я создать проверку, которая запускается всякий раз, когда пользователь или связанные с ним атрибуты постов изменяется?

т.е. мы хотим, чтобы у пользователя была валидация, которая запускается всякий раз, когда атрибут пользователя обновляется или когда одна из его публикаций обновляется / создается.

Ответы [ 2 ]

1 голос
/ 29 марта 2020

Вы можете использовать validates_associated, чтобы вызвать ассоциации на связанной модели:

class User < ApplicationRecord
  validates :name, presence: true
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :user
  validates_associated :user
end

user = User.create!(name: 'Max')
post = user.posts.new
user.name = ''
post.save! # will trigger a validation error

я могу создать проверку, которая запускается всякий раз, когда пользователь или его атрибуты связанных сообщений изменены?

Это не так, как работают проверки. Проверки запускаются при вызове .valid?, .save/save! или .update/.update! на модели. Это больше похоже на нормальный обратный вызов или обратный вызов ассоциации или проблему X & Y.

0 голосов
/ 29 марта 2020

Да, вы можете! У вас есть некоторые специальные функции, связанные с жизненным циклом ваших моделей. Проверьте здесь!

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