我想設置一個has_many關聯的限制。例如,一輛汽車有4個輪胎。因此,車表應該有4個外鍵記錄在輪胎表中(注意,在這種情況下,每個輪胎可以有不同的優先級,因此我需要4個鍵)有很多限制
無論如何,我可以指定汽車記錄中的輪胎鑰匙的數量在宣佈關聯時?
我想設置一個has_many關聯的限制。例如,一輛汽車有4個輪胎。因此,車表應該有4個外鍵記錄在輪胎表中(注意,在這種情況下,每個輪胎可以有不同的優先級,因此我需要4個鍵)有很多限制
無論如何,我可以指定汽車記錄中的輪胎鑰匙的數量在宣佈關聯時?
沒有afaik,但你可以使用康康寶石來實現。例如,ability.rb
can :create, Car do |car|
car.tires.count <= 4
end
內我不認爲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
如果您使用嵌套窗體通過汽車創建輪胎,則可以相應地修改此示例代碼。
併發更新如何?它會起作用嗎? – 2012-07-14 11:47:06
@VictorMoroz在併發更新期間,我不太確定這段代碼的行爲。 – 2012-07-15 06:10:54