has_many アソシエーションに制限を設定したいと思います。たとえば、車には 4 つのタイヤがあります。したがって、Car テーブルには、Tire テーブル内のレコードへの 4 つの外部キーが必要です (この場合、各タイヤには異なる優先順位が設定される可能性があるため、4 つのキーが必要になることに注意してください)。
とにかく、関連付けを宣言するときに車のレコードでタイヤキーの数を指定できますか?
has_many アソシエーションに制限を設定したいと思います。たとえば、車には 4 つのタイヤがあります。したがって、Car テーブルには、Tire テーブル内のレコードへの 4 つの外部キーが必要です (この場合、各タイヤには異なる優先順位が設定される可能性があるため、4 つのキーが必要になることに注意してください)。
とにかく、関連付けを宣言するときに車のレコードでタイヤキーの数を指定できますか?
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
ネストされたフォームを使用して車でタイヤを作成している場合は、このサンプル コードを適宜変更できます。
afaikはありませんが、カンカンジェムを使用してそれを実現できます。たとえば、ability.rb内
can :create, Car do |car|
car.tires.count <= 4
end