【发布时间】:2012-06-21 11:17:48
【问题描述】:
我在验证多个字段时遇到了一些问题,特别是区分大小写的唯一验证以及错误消息。
假设我想确保以下字段组合在我的 [Postgres] 数据库中是唯一的并且区分大小写(Mary == mary):
user_id
first_name
last_name
举个例子
{4,玛丽,史密斯}
{4,玛丽,史密斯}
不应该保存。
我知道我需要做两件事:
1.在db中创建唯一索引
2. validate_uniqueness_of 在我的模型中
- 对于索引,我创建了它,但我没有找到确保区分大小写的方法(从我的阅读来看,似乎 MySQL 是,而 Postgres 不是)。除非有人知道如何执行此操作,否则我会考虑完成此操作。
- 我的模型中有以下代码:
validates_uniqueness_of :user_id,
:case_sensitive => false,
:scope => [:first_name, :last_name],
:if => :name_subcat_is_name?,
:message => "You have already saved this contact information combination."
问题在于区分大小写似乎只适用于 user_id,而不适用于名字和姓氏。那么如何将区分大小写应用于所有字段的验证?
另外,我的错误信息包括模型的名称:
用户 您已保存此联系信息组合。
我尝试使用 yaml,但它没有删除“用户”类。 我找到了this,但不知道如何让它检查我的所有字段而不仅仅是一个。如何将所有字段添加到范围中并查看该范围是否为 ":taken"?
2012 年 6 月 24 日更新 1:
使用我自己的验证方法听起来正是我所需要的,但我在实现代码时遇到了一些麻烦。 MyModel.find(:first) 方法已经被贬值了,所以我试着用这个代替它:
existing_record = ContactInfo.where(:conditions => ["first_name ILIKE ? AND last_name ILIKE ?", first_name, last_name])
但是当它到达下一行时
<pre>unless existing_record.blank? </pre>
我收到一个错误:
PG::Error: ERROR: column contact_infos.conditions does not exist
LINE 1: SELECT COUNT(*) FROM "contact_infos" WHERE "contact_infos"....
SELECT COUNT(*) FROM "contact_infos" WHERE "contact_infos"."conditions" IN ('first_name ILIKE ? AND last_name ILIKE ?', 'mary', 'Smith')
【问题讨论】:
标签: ruby-on-rails validation unique