这是提供的示例:
has_many :spam_comments, -> { where spam: true }, class_name: 'Comment'
是否可以执行以下操作:
class Driver < ActiveRecord::Base
belongs_to :vehicle
end
class Vehicle < ActiveRecord::Base
has_many :drivers, -> { where('name').distinct }
end
我的场景不是一个has_many,这就是为什么我删除了class_name:子句。
我想要实现的是阻止将驱动程序加载到Vehicle的集合中,除非驱动程序名称是唯一的。
herbie = Vehicle.create(name: 'Herbie')
fred = Driver.create(name: 'Fred')
herbie.drivers << fred
herbie.drivers << fred # This second association should not work.
答案 0 :(得分:4)
您可以在此处使用scope
唯一性选项。
在Driver
模型中,添加以下内容
validates_uniqueness_of :name, scope: :vehicle_id
此外,您应该添加如下迁移:
add_index :drivers, [ :vehicle_id, :name ], :unique => true
避免竞争条件。有关详情,请查看this