У Rails много проверок ассоциаций - PullRequest
0 голосов
/ 06 ноября 2018

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

В моем user.rb

accepts_nested_attributes_for :histories
has_many :histories

Мне нужно добавить проверку историй, когда пользовательская модель обновляется, я знаю, accepts_nested_attributes позаботится о проверках при добавлении пользователя через формы, мне нужно проверять проверку каждый раз, когда обновляется пользовательская модель. даже в консоли

Если я добавлю

validates :histories, presence: true

Он проверит записи в таблице историй. Если какая-либо запись доступна для пользователя. Он пропустит проверку историй, мне нужно проверять каждый раз, когда объект обновляется. Есть ли способ проверить, создается ли новая запись при обновлении родительской модели?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Из вашего описания, я думаю, что вы можете искать это validates_associated:

class User < ApplicationRecord
  has_many :histories

  # validates that the association exists
  validates :histories, presence: true

  # validates that the objects in the associated collection are themselves valid
  validates_associated :histories
end
0 голосов
/ 06 ноября 2018

Валидатор validates :attribute, presence: true предназначен для проверки первоклассных атрибутов модели, а не отношений. Такие вещи, как в классе пользователя validates :email, presence: true, там, где он работает лучше всего.

Ваша цель - проверить отношение has_many или проверить отношение? Если это тест, вы должны создать спецификацию, которая запускает тест в соответствии с it { should have_many(:histories) } .... очевидно, в зависимости от вашей среды тестирования.

Если ваша цель состоит в том, чтобы проверить наличие множества связей, вам может понадобиться написать собственный метод проверки. Тем не менее, можете ли вы рассказать немного больше о том, что именно вы пытаетесь достичь / как насчет отношений has_many, которые вы пытаетесь проверить?

...