我有一个before_create函数,用于填充表中的列。例如 before_create:generate_number
def generate_number
end
我希望在根据条件填充列之前检查列的唯一性。
示例:如果数字是在2年前的数据库中创建的,我不希望在其上应用唯一性验证
我怎么能为它编写自定义验证。我应该把它包括在哪里?
答案 0 :(得分:0)
您可以使用unless
或if
将逻辑应用于验证:
validate_uniqueness_of :column_name, unless: -> { created_at < 2.years.ago }
这将以与您的before_create
class User < ActiveRecord::Base
#...
validate_uniqueness_of :column_name, unless: -> { created_at < 2.years.ago }
end
答案 1 :(得分:0)
由于您在评论中指定了您希望它继续生成数字,直到生成一个尚未在数据库中的数字:
def generate_number
begin
value = generate
end while created_at < 2.years.ago && Table.exists?(column: value)
self.column = value
end
def generate
... # Code to generate number here
end
这继续循环while
created_at列早于2年前生成的数字在数据库中。我将while
条件设置在底部,以便generate
在检查之前至少运行一次。
我仍然不明白created_at条件的目的,如果你想指定它应该如何工作,我可以修改那个部分。否则,我只会将其视为一个例子,而不是实际问题的一部分。