Rails中唯一性助手的范围选项

时间:2012-10-28 23:42:27

标签: sql ruby-on-rails ruby ruby-on-rails-3 helper

在阅读Rails指南时,我遇到了一些我不确定的事情。在该示例中,它表明我可以编写一个范围选项,为检查唯一性添加其他选项。我的问题是,我是否必须写出一个专门针对某个时间段查询的方法。换句话说,在下面的例子中是否需要更多的代码而不是眼睛?如果没有,Rails如何知道检查表数据库中的正确时间戳列?

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

2 个答案:

答案 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时没有错误