我有一个公会模特,有一个"姓名"和#34;境界"属性 我想让它成为" Name"和#34;境界"无论如何,配对都是独一无二的。强制执行区分大小写是我遇到的唯一问题。
这是我到目前为止所得到的:
validates_uniqueness_of :name, scope: :realm, case_sensitive: false
[case_sensitive:false]部分有效但仅适用于第一个属性(名称)
我目前正在使用Rails 4.1.8,SQLite for developemnt和PG for Production 我非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
我的理解是不支持此功能。 case_sensitive
选项适用于要验证的列,范围选项仅适用于同一表中的列。
您可以尝试使用PG lower
,因此scope: "lower(realm)"
,但我怀疑它在尝试访问列table_name.lower(realm)
时会失败
您需要做的是将该验证器替换为自定义验证器。
class Model
validate :your_validator
private
def your_validator
if Model.
where("LOWER(name) = ? AND LOWER(realm) = ?",
name.downcase, realm.downcase).
exists?
# add errors here
end
end
end