有很多限制

时间:2012-07-13 22:17:58

标签: ruby-on-rails ruby activerecord

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

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

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

没有afaik,但你可以使用康康宝石实现这一目标。例如,在ability.rb

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