Ruby Rails でスケジューリング システムを作成しています。システムは、顧客、リソース、および予約で構成されます。顧客とリソースへの予約には多対 1 があります。顧客とリソースは、多くの予約を持つことができます。
予約にはcustomer_idとbooking_resource_idがあり、保護する必要があると思いました。Resource が activeadmin と競合したため、booking_resource もモデルとして使用しました。
:booking_resource_id ( https://github.com/robinbortlik/validates_overlap )へのスコープで重複する検証を簡単に作成できるようにする validates_overlap gem を使用しています。目標は、同じリソースを同時にスケジュールできないようにすることです。
全体が一括割り当ての下で機能しますが、booking_resource_id を保護として配置するとすぐに、コントローラーに個々の割り当てを追加して、検証を通過します。
保護された属性を検証するにはどうすればよいですか?
http://www.davidverhasselt.com/2011/06/28/5-ways-to-set-attributes-in-activerecord/を読みましたが、少し追い詰められているようです。attributes= を使用し、保護された大量割り当てをオーバーライドした場合、ポイントは何ですか?
class Booking < ActiveRecord::Base
belongs_to :customer
belongs_to :booking_resource
attr_accessible :approved, :approvedBy, :end, :start, :title
attr_protected :customer_id, :booking_resource_id
validate :start_cannot_be_future
validates :start, :end, :overlap => {:scope => :booking_resource_id}
def start_cannot_be_future
if self.start > self.end
errors.add(:start, "Date can't be in the future")
end
end
end