Sql Rails中唯一性帮助器中的作用域选项

Sql Rails中唯一性帮助器中的作用域选项,sql,ruby-on-rails,ruby,ruby-on-rails-3,helper,Sql,Ruby On Rails,Ruby,Ruby On Rails 3,Helper,在阅读Rails指南时,我遇到了一些我不确定的事情。在这个示例中,它显示了我可以编写一个scope选项来添加额外的选项来检查唯一性。我的问题是,我是否必须写出一个专门针对某个时间段进行查询的方法。换句话说,在下面的例子中,需要的代码是否比看上去的要多?如果不是,Rails如何知道在表数据库中检查正确的时间戳列 class Holiday < ActiveRecord::Base validates :name, :uniqueness => { :s

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

class Holiday < ActiveRecord::Base
   validates :name, 
             :uniqueness => { :scope => :year,
             :message => "should happen once per year" }
end
class假日{:范围=>:year,
:message=>“应每年发生一次”}
结束

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

所有这一切都是为了确保模型上
年份
列上下文中的唯一性-该列可以是任何内容,但它必须存在。它不会自动检查带有完整日期的时间戳的年份部分。您的模型负责实际存储
年份

当然,您可以自动填充此
年度
。假设您的模型中有一列
holiday\u date
。然后,您可以确保
year
列始终设置为:

before_save :set_year

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

(try方法只是确保如果假日日期恰好是
nil
),则不会出现错误)

非常好的解释。谢谢你的帮助。