-1

has_many アソシエーションに制限を設定したいと思います。たとえば、車には 4 つのタイヤがあります。したがって、Car テーブルには、Tire テーブル内のレコードへの 4 つの外部キーが必要です (この場合、各タイヤには異なる優先順位が設定される可能性があるため、4 つのキーが必要になることに注意してください)。

とにかく、関連付けを宣言するときに車のレコードでタイヤキーの数を指定できますか?

4

2 に答える 2

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

ネストされたフォームを使用して車でタイヤを作成している場合は、このサンプル コードを適宜変更できます。

于 2012-07-14T08:16:48.940 に答える
0

afaikはありませんが、カンカンジェムを使用してそれを実現できます。たとえば、ability.rb内

can :create, Car do |car|
   car.tires.count <= 4
end
于 2012-07-14T01:22:12.713 に答える