我正在仔细阅读Ruby on Rails Guides article on ActiveRecord validations,我看到了关于uniqueness
验证的简洁摘录:
还有一个:case_sensitive选项,可用于定义唯一性约束是否区分大小写。此选项默认为true。
这是一项非常有用的功能,可确保两位用户无法使用相同的用户名或电子邮件注册。但是,我想使用类似的验证,但使用不同的方法来确定字符串'平等。我想确保所有条目在squeeze
下都是唯一的。
举个例子,假设我的Post
模型有一个文本属性content
。我想确保如果数据库中已有foo bar
,则不会接受foo bar
或foo bar
。有没有更好的方法来做到这一点,而不仅仅是添加自定义验证来迭代Post.all
,squeeze
每个条目,并将其与squeeze
d content
进行比较?我无法想象这个尺度很好。
答案 0 :(得分:2)
虽然您可能尝试以“Rails”的方式完成所有事情,但在这种特殊情况下,我会走另一条道路。如果由于某种原因您希望在数据库中保留“foo bar”
内容,只需引入新字段squeezed_content
,实施post_commit
挂钩以使用压缩值{{1}更新此字段并且暗示对新引入的content
字段进行验证,强制它是唯一的。
此外,您可能只存储已挤压的值。
答案 1 :(得分:2)
您可以在名为posts
的{{1}}表中添加另一列或类似内容,然后执行此类操作以使用内置唯一性验证:
squeezed_content