0

在阅读 Rails 指南时,我遇到了一些我不确定的事情。在示例中,它表明我可以编写一个范围选项来添加额外的选项来检查唯一性。我的问题是,我是否必须写出一种专门针对某个时间段进行查询的方法。换句话说,在下面的示例中,是否有比看上去更多的代码?如果不是,Rails 怎么知道在表数据库中检查正确的时间戳列?

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

2 回答 2

1

Holiday如果模型有一个year字段(即如果holidays表有一个year列),这将起作用。然后 AR 将简单地将名称唯一性限制为具有相同的记录year

于 2012-10-28T23:47:36.147 回答
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

于 2012-10-28T23:47:56.997 回答