2012-09-20 108 views
0

我有車輛,每輛車可以有很多預訂。每個預訂可以有許多活動。這個問題是在我針對現有車輛驗證新的預訂和事件時出現的。在Rails 3中保存之前獲取多態父項的屬性?

當確認事件模型,我需要遍歷到車輛,並找到所有的預訂,並可以與新的交鋒,之前其實我已經保存了新的預訂和事件的任何活動。

Class Event < ActiveRecord::Base 
    belongs_to :eventable, :polymorphic => true 
end 

Class Booking < ActiveRecord::Base 
    belongs_to :vehicle 
    has_many :events, :as => :eventable 
end 

Class Vehicle < ActiveRecord::Base 
    has_many :bookings 
end 

創建預訂時,它有vehicle_id。如何獲取Event模型中的vehicle_id?

回答

1

您通常會使用validates_uniqueness_of有:範圍,但加入協會在這裏不會這樣的。下面是一個自定義唯一性驗證器的例子:

class Booking 
    # Create a custom validation 
    validate :verify_unique_vehicle_date 

private 
    def verify_unique_vehicle_date 
    if booking = Booking.includes(:events).where('vehicle_id = ? AND events.date IN (?)', self.vehicle_id, self.events.map(&:date)).first 
     errors.add(:vehicle, "already booked on #{booking.events.map(&:date).join(',')}") 
    end 
    end 
end 
+0

謝謝@Winfield這是解決它和一個更好的方法。我被複數個'validate'和單數'include'發現了一會兒。 – matharden

+0

謝謝你在那裏發現錯誤,稍微離開袖口。 – Winfield

+0

謝謝你如此迅速地提出答案!任何想法,我怎麼得到這個檢查日期範圍?我有'events.start_at'和'events.end_at'。如果某個活動是在同一天,您目前的作品就會發揮作用。 – matharden

相關問題