【发布时间】:2017-09-14 22:24:31
【问题描述】:
假设我有两个班级
class student < ApplicationRecord
has_many :books
end
class Book < ApplicationRecord
belongs_to :student
end
每本书都有一个布尔变量read,表示该书是否已被阅读。每个学生只能读一本书。如果学生的任何一本书被标记为已读,他的其他书将无法再阅读。
是否有 PSQL 或活动记录验证允许此约束发生?
具体来说,book.update_attributes!(read: true) 将检查其他相关书籍。数据库约束会更受欢迎。
非常感谢!
更新问题陈述:
read 变成一个时间戳 read_at,book.update_attributes!(read_at: Time.zone.now) 将检查学生之前是否阅读过任何其他书籍。
【问题讨论】:
-
因此,当在 Book 表中创建记录时,
read将设置为false,并在阅读该书时更新为true...一旦阅读了任何书籍,将另一本书的read值更改为true的任何尝试都应该失败,对吗? -
书籍在创建时读取默认为 false 并在读取时更新为 true。任何将同一学生的阅读值的不同书籍更改为 true 的尝试都应该失败
标签: ruby-on-rails postgresql validation activerecord psql