关联关系唯一性记录的验证

时间:2019-07-01 09:48:04

标签: ruby-on-rails ruby

我有一些查询,例如:

Assignment.where(date: "2019-07-01")
         .includes(crews: :truck)
         .where.not({ crews: {truck_id: nil}})
         .count
#=>  2 records.

以下是包含的示例:

Assignment.where(date: "2019-07-01")
         .includes(crews: :truck)
         .where.not({ crews: {truck_id: nil}})
         .distinct.pluck('trucks.name')

#=> ["Mercedes", "BMW"] 

我想检查Assignment.where中的truck_id的唯一性(日期:“ 2019-07-01”) 为了将现有的truck_id附加到另一个Assignment对象,触发了验证。

会弹出一条消息,提示您无法添加,因为在.where

中指定的日期,这样的Truck对象已经附加到其中一个Assignment中。

请告诉我如何正确实施。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您不想编写验证方法,仍然可以使用唯一性选项。请使用条件选项来确定应进行验证的行。

validates :truck_id, uniqueness: true, if: Proc.new { |assignment| assignment.on_specified_day? }