2015-08-24 32 views
0

我有兩個型號:event.rbbag.rb 事件有一個名爲slug屬性和包有一個屬性叫做bag_codeRails的驗證獨特Cross車型

我根據bag_code屬性生成視圖。例如。如果行李代碼是「4711」,我會根據該代碼加載記錄。

現在有些場合,用戶可以在事件中定義一個slug URL,在這種情況下,它應該覆蓋bag-code。 我不想要的是,用戶可以選擇一個值爲已經是bag_code的slug(在這種情況下,應該禁止選擇slug「4711」),因爲這會在我看來造成麻煩,所以它必須是獨特的兩個模特屬性

我試圖通過範圍

validates_uniqueness_of :slug, scope: [:bag_code] 

解決這個但這隻會在同一個模型中工作。

協會我的模型之間是:

event.rb

has_many :bags 

回答

1

自定義驗證方法,將工作對於這種情況。這裏是你將如何設置它:

event.rb

validates :slug, uniqueness: true 
validate :slug_is_unique_from_bag_codes 

private 

def slug_is_unique_from_bag_codes 
    if Bag.find_by bag_code: slug 
    errors.add :base, "The slug is already being used as a bag code" 
    end 
end