Sql Rails中唯一性帮助器中的作用域选项
在阅读Rails指南时,我遇到了一些我不确定的事情。在这个示例中,它显示了我可以编写一个scope选项来添加额外的选项来检查唯一性。我的问题是,我是否必须写出一个专门针对某个时间段进行查询的方法。换句话说,在下面的例子中,需要的代码是否比看上去的要多?如果不是,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
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
),则不会出现错误)非常好的解释。谢谢你的帮助。