我需要验证表的会员卡号仅对当前年份是唯一的,因此我必须为我的模型列构建自定义验证器。
我的问题是:
修改1:
请注意,当前年份存储在名为expire_date
的列中,该列是年 - 月 - 日日期格式。
但是,该检查仅适用于一年。
我怎么处理这个?这就是为什么我认为我应该使用自定义验证器,我认为scope
在这种情况下不应该起作用。
编辑2:
我刚注意到:if
选项,我会检查是否可以通过它实现此功能。
答案 0 :(得分:3)
Rails 3提供了语法糖,所以你可以这样做:
validates :car_number, :uniqueness => {:scope => :expire_year, :message => 'has already been taken this year'}, :on => :update
def expire_year
expire_date.strftime("%Y")
end
查询的重要程度取决于数据库架构和负载。不要忘记在年份列上设置索引并检查rails日志。
请注意,这仅适用于更新,因为新对象在保存之前不会填充时间戳。
答案 1 :(得分:2)