私は2つのモデルの家と予約を持っています。booking_dateの検証ではすべて問題ありません。しかし、同じリクエストで複数の予約を更新または作成しようとすると。検証では、同じリクエストパラメータで無効な予約を確認できません。
予約テーブルが空であると仮定して例を挙げましょう。
params = { :house => {
:title => 'joe', :booking_attributes => [
{ :start_date => '2012-01-01', :finish_date => '2012-01-30 },
{ :start_date => '2012-01-15', :finish_date => '2012-02-15 }
]
}}
2番目の予約も保存されますが、そのstart_dateは最初の予約間隔の間にあります。それらを1つずつ保存すると、検証が機能します。
class House < ActiveRecord::Base
attr_accessible :title, :booking_attributes
has_many :booking
accepts_nested_attributes_for :booking, reject_if: :all_blank, allow_destroy: true
end
class Booking < ActiveRecord::Base
belongs_to :house
attr_accessible :start_date, :finish_date
validate :booking_date
def booking_date
# Validate start_date
if Booking.where('start_date <= ? AND finish_date >= ? AND house_id = ?',
self.start_date, self.start_date, self.house_id).exists?
errors.add(:start_date, 'There is an other booking for this interval')
end
# Validate finish_date
if Booking.where('start_date <= ? AND finish_date >= ? AND house_id = ?',
self.finish_date, self.finish_date, self.house_id).exists?
errors.add(:finish_date, 'There is an other booking for this interval')
end
end
end
私は2時間近くグーグルで検索しましたが、何も見つかりませんでした。この問題を解決するための最良のアプローチは何ですか?
いくつかのリソース