Supposons que je deux classesRails one-to-many: Valider la valeur du champ
class student < ApplicationRecord
has_many :books
end
class Book < ApplicationRecord
belongs_to :student
end
Chaque livre sera une variable booléenne indiquant read
si le livre a été lu ou non. Chaque étudiant peut seulement lire un livre. Si l'un des livres d'un élève est marqué comme lu, ses autres livres ne peuvent plus être lus.
Existe-t-il une validation PSQL ou active-record pour permettre cette contrainte? En particulier, book.update_attributes!(read: true)
fera une vérification sur d'autres livres associés. Les contraintes de base de données seraient grandement préférées.
Merci beaucoup!
Mise à jour énoncé du problème:
lecture devient un read_at d'horodatage et book.update_attributes!(read_at: Time.zone.now)
fera un chèque si l'étudiant a lu d'autres livres auparavant.
Ainsi, lorsque un enregistrement est créé dans la table Book, 'read' serait défini sur' false', et mis à jour à 'true' quand ce livre est lu ... une fois qu'un livre a été lu, toute tentative de modification d'un livre différent' read 'value à' true' devrait échouer, est-ce co rrect? – skwidbreth
Les livres sont créés avec la valeur par défaut de lecture sur false et sont mis à jour à true lorsqu'ils sont lus. Toute tentative de changement d'un livre différent de la valeur de lecture du même élève à true devrait échouer – LOCKLOCK