【Rails】has_manyできる数を動的に(?)設定するにはどうすればいいでしょうか?
上記を参考にしたのですが、上手くいかなかったので質問させてください。
困ってる内容 | |
---|---|
1 | 「EventDate」が持てるhas_many子モデル「Entry」の制限数を、「Event」モデルのmax_capacity値にしたい |
意味 | あるイベント(Event)の最大定員をmax_capacity値にしたい。開催日付(EventDate)毎の子モデル予約者(Entry)の数をEventモデルのmax_capacity値以上にならないようにできないか。 |
画像の赤部分を上から記載しています。
class Event < ApplicationRecord has_many :event_dates ,dependent: :destroy end
class EventDate < ActiveRecord::Base belongs_to :event ,optional: true has_many :entries ,dependent: :destroy end
class Entry < ApplicationRecord belongs_to :event_date, counter_cache:true end
自分なりの試行錯誤...
class Entry < ApplicationRecord belongs_to :event_date, counter_cache:true validate :can_not_create_entry_over_maxcapacity,on: :create private def can_not_create_entry_over_maxcapacity if self.event_date.entries.size > self.event_date.event.max_capacity.to_i errors.add(:entry, "満席なので、予約が完了しませんでした") end end end
とし、シードデータを格納すると、
特にバリデーションが発生していないようでした。
(例:max_capacityが10とすれば、Entryが11以上格納されてしまう状態です。)
ご助力いただけないでしょうか、宜しくお願いします。
もし解決しない場合
今後の対策 | |
---|---|
1 | コントローラなら制御できるのか。 |
2 | event_dateにmax_capacityカラムがあるべきなのか。 |
等、試行錯誤や検討もしようとは思っています。
あなたの回答
tips
プレビュー