2012-10-28 14 views
0

在閱讀Rails指南時,我遇到了一些我不確定的事情。在這個例子中,它表明我可以編寫一個範圍選項,添加額外的選項來檢查唯一性。我的問題是,我是否必須寫出一個專門針對某個時間段進行查詢的方法?換句話說,在下面的例子中,是否有更多的代碼需要滿足眼睛?如果不是,Rails如何知道檢查表數據庫中正確的時間戳列?Rails中唯一性助手的範圍選項

class Holiday < ActiveRecord::Base 
    validates :name, 
      :uniqueness => { :scope => :year, 
      :message => "should happen once per year" } 
end 

回答

1

這一切都爲確保您的模型year列的背景下獨特性 - 該列可以是任何東西,但它必須存在。它不會自動檢查具有完整日期的年份部分時間戳。您的模型負責實際存儲year值。

您當然可以自動填充此year。假設您的模型中有一列holiday_date。然後你就可以確保year列始終設置像這樣:

before_save :set_year 

def set_year 
    self.year = holiday_date.try(:year) 
end 

(該try方法只是確保如果holiday_date恰好是nil沒有錯誤)

+0

優秀的解釋。謝謝您的幫助。 – jason328

1

如果Holiday模型具有year場這將工作(即如果holidays表中有一個year列)。然後,AR只會限制名字的唯一記載具有相同year