Ruby on rails 如何向Rails中的ActiveRecord模型添加自定义唯一性验证?
我在仔细阅读时,发现了这篇关于Ruby on rails 如何向Rails中的ActiveRecord模型添加自定义唯一性验证?,ruby-on-rails,ruby,validation,rails-activerecord,Ruby On Rails,Ruby,Validation,Rails Activerecord,我在仔细阅读时,发现了这篇关于唯一性验证的简洁摘录: class Post < ActiveRecord::Base before_save :set_squeezed_content validates :squeezed_content, uniqueness: true def set_squeezed_content self.squeezed_content = content.squeeze end end 还有一个:区分大小写的选项,可用于定义唯一
唯一性验证的简洁摘录:
class Post < ActiveRecord::Base
before_save :set_squeezed_content
validates :squeezed_content, uniqueness: true
def set_squeezed_content
self.squeezed_content = content.squeeze
end
end
还有一个:区分大小写的选项,可用于定义唯一性约束是否区分大小写。此选项默认为true
例如,这是一个非常有用的功能,可以确保两个用户不能使用相同的用户名或电子邮件注册。但是,我希望使用类似的验证,但使用不同的方法来确定字符串的相等性。我想确保我的所有条目在压缩
下都是唯一的
例如,假设我的Post
模型有一个文本属性content
。我想确保如果foobar
已经在数据库中,它将不接受foobar
或foobar
。除了添加自定义验证来迭代Post.all
,screek
对每个条目进行压缩,并将其与screek
内容进行比较外,还有更好的方法吗?我无法想象它能很好地扩展。虽然您可能会尝试用“Rails”的方式完成所有事情,但在这种情况下,我会走另一条路。如果出于某种原因,您希望在数据库中保留“foo bar”
内容,只需引入一个新字段压缩内容
,实现一个post_commit
hook,用压缩值content
更新此字段,并对新引入的compressed_内容
字段进行验证,使其唯一
另外,您可能只存储已经压缩的值。虽然您可能尝试以“Rails”的方式完成所有操作,但在这种特殊情况下,我会选择另一种方式。如果出于某种原因,您希望在数据库中保留“foo bar”
内容,只需引入一个新字段压缩内容
,实现一个post_commit
hook,用压缩值content
更新此字段,并对新引入的compressed_内容
字段进行验证,使其唯一
您也可以只存储已压缩的值。您可以在posts
表中添加另一列,名为压缩的内容
或类似的内容,然后执行类似操作以使用内置唯一性验证:
class Post < ActiveRecord::Base
before_save :set_squeezed_content
validates :squeezed_content, uniqueness: true
def set_squeezed_content
self.squeezed_content = content.squeeze
end
end
class Post
您可以在posts
表中添加另一列,名为压缩内容
或类似内容,然后执行类似操作以使用内置唯一性验证:
class Post < ActiveRecord::Base
before_save :set_squeezed_content
validates :squeezed_content, uniqueness: true
def set_squeezed_content
self.squeezed_content = content.squeeze
end
end
class Post