2012-07-13 78 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