Rails: Validate has_many по крайней мере один с условием - PullRequest
0 голосов
/ 14 октября 2018

У меня есть модель A с has_many B. Я хочу проверить, что у A есть хотя бы один B с полем active, установленным в true.Как я могу добавить пользовательскую проверку к A, которая обеспечивает это, если B - это модель, которая обновляется?

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Может быть, я не совсем понимаю, что вы хотите архивировать.Вы пробовали это с ActiveRecord :: NestedAttributes?

Если вы просто обновляете B - B будет проверено.Вы можете запретить сохранение B - но не A.

Может быть, вы хотите установить некоторые флаги в A-triggert, обновив B. Это можно сделать с помощью методов обратного вызова: https://guides.rubyonrails.org/active_record_callbacks.html

ИлиВы можете пометить B как недействительный, если для A

нет других активных B что-то в этом роде:

validate :your_custom_validation_for_b
def your_custom_validation_for_b
  unless self.your_model_a.your_model_b.where(active: true).exists?
    errors.add(:active, "at least this B for A should be active")
  end
end  
0 голосов
/ 14 октября 2018

Есть несколько способов, самый простой способ - через проверку в модели, например:

validate: active

Затем определите частный active метод вмодель

def active
*enter logic that define attributes required to be validated*
end 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...