在阅读Rails指南时,我遇到了一些我不确定的事情。在该示例中,它表明我可以编写一个范围选项,为检查唯一性添加其他选项。我的问题是,我是否必须写出一个专门针对某个时间段查询的方法。换句话说,在下面的例子中是否需要更多的代码而不是眼睛?如果没有,Rails如何知道检查表数据库中的正确时间戳列?
class Holiday < ActiveRecord::Base
validates :name,
:uniqueness => { :scope => :year,
:message => "should happen once per year" }
end
答案 0 :(得分:1)
如果Holiday
模型具有year
字段(即holidays
表具有year
列),则此方法有效。然后AR将简单地限制具有相同year
答案 1 :(得分: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
时没有错误