在Rails中添加事务验证

时间:2016-06-22 07:07:13

标签: ruby-on-rails ruby-on-rails-4

我有一个名为StudentProductRelationship的模型,其中包含student_idproduct_idprimary_product列。 primary_product是一个布尔字段。我想在模型上添加一个验证,以便在每个student_id的每个事务之后,至少一个primary_product为真。我不想为此更改数据库设计。有什么建议吗?

2 个答案:

答案 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,尽管这确实需要明智。为每个对象运行验证查询很难。它应该不是在模型级别(即每个对象)上完成,而是在控制器中的某个位置进行,您可以对关节对象进行批量更新。顺便说一下,把它包裹在交易中。