2012-07-13 23 views
0

我想设置一个has_many关联的限制。例如,一辆汽车有4个轮胎。因此,车表应该有4个外键记录在轮胎表中(注意,在这种情况下,每个轮胎可以有不同的优先级,因此我需要4个键)有很多限制

无论如何,我可以指定汽车记录中的轮胎钥匙的数量在宣布关联时?

回答

0

没有afaik,但你可以使用康康宝石来实现。例如,ability.rb

can :create, Car do |car| 
    car.tires.count <= 4 
end 
1

内我不认为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 

如果您使用嵌套窗体通过汽车创建轮胎,则可以相应地修改此示例代码。

+0

并发更新如何?它会起作用吗? – 2012-07-14 11:47:06

+0

@VictorMoroz在并发更新期间,我不太确定这段代码的行为。 – 2012-07-15 06:10:54