我有一个名为StudentProductRelationship
的模型,其中包含student_id
,product_id
和primary_product
列。 primary_product
是一个布尔字段。我想在模型上添加一个验证,以便在每个student_id
的每个事务之后,至少一个primary_product
为真。我不想为此更改数据库设计。有什么建议吗?
答案 0 :(得分:0)
一种解决方案可以是在模型StudentProductRelationship
中添加验证,只需添加:
validates :primary_product, uniqueness: true
答案 1 :(得分:0)
您可以将唯一性验证与范围选项 - http://guides.rubyonrails.org/active_record_validations.html#uniqueness
结合使用有一个:scope选项,可用于指定其他属性 用于限制唯一性检查:
class StudentProductRelationship < ActiveRecord::Base
validates :primary_product, uniqueness: {scope: :student_id}
end
与条件验证一起 - http://guides.rubyonrails.org/active_record_validations.html#conditional-validation
class StudentProductRelationship < ActiveRecord::Base
validates :primary_product, uniqueness: {scope: :student_id}, if: "primary_product"
end
检查至少一个&#34; true&#34;如果存在,您可以使用custom validation,尽管这确实需要明智。为每个对象运行验证查询很难。它应该不是在模型级别(即每个对象)上完成,而是在控制器中的某个位置进行,您可以对关节对象进行批量更新。顺便说一下,把它包裹在交易中。