我想为 has_many 关联设置一个限制。例如,一辆汽车有 4 个轮胎。因此 Car 表应该有 4 个外键来记录 Tire 表中的记录。(请注意,在这种情况下,每个轮胎可以有不同的优先级,因此我需要 4 个键)
无论如何,我可以在声明关联时指定汽车记录中轮胎钥匙的数量吗?
我想为 has_many 关联设置一个限制。例如,一辆汽车有 4 个轮胎。因此 Car 表应该有 4 个外键来记录 Tire 表中的记录。(请注意,在这种情况下,每个轮胎可以有不同的优先级,因此我需要 4 个键)
无论如何,我可以在声明关联时指定汽车记录中轮胎钥匙的数量吗?
我不认为has_many
协会有这样的选择,但您可以before_create
在您的轮胎模型中进行验证。假设您独立创建轮胎,而不是通过使用嵌套形式的汽车,下面是您的RAILS_APP/app/models/tire.rb
.
Class Tire < ActiveRecord::Base
belongs_to :car
before_create :four_tires_per_car
private
def four_tires_per_car
# can't create more tires if the car in question already has four tires
errors[:base] << "A car can have a maximum of four tires" if car.tires.count == 4
end
end
如果您使用嵌套表单通过汽车创建轮胎,您可以相应地修改此示例代码。
没有 afaik,但您可以使用 cancan gem 来实现这一点。例如在ability.rb里面
can :create, Car do |car|
car.tires.count <= 4
end