我在验证多个字段时遇到了一些问题,特别是区分大小写的唯一验证以及错误消息。多个字段的Ruby on Rails验证问题
比方说,我希望确保下面的字段组合是独一无二的,是区分大小写(玛丽==玛丽)在我的[Postgres里的db:
user_id
first_name
last_name
举个例子
{4, Mary,Smith}
{4,mary,Smith}
不应该保存。
我知道我需要做两件事情:
1分贝创建唯一索引
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,但没有删除“User”类。 我发现this,但不知道如何使它检查我的所有领域,而不仅仅是一个。我如何将所有字段添加到作用域中,并查看该作用域是否“被采用”?
(更新版)2012年6月24日:
用我自己的验证方法听起来像是正是我需要的,但我有一些麻烦执行代码。该MyModel.find(:第一)方法现在已经贬值,所以我想这个替代它:
existing_record = ContactInfo.where(:conditions => ["first_name ILIKE ? AND last_name ILIKE ?", first_name, last_name])
但是当它到达下一行
unless existing_record.blank?
我得到一个错误:
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')
这正是我正在写作的答案;-) –
请参阅我上面的评论.... – purplerice
我的不好 - 查询不正确。当我将它重写为:existing_record = ContactInfo.where(“contact_infos.first_name ILIKE?AND contact_infos.last_name ILIKE?”,first_name,last_name)时,它可以很好地工作。谢谢! – purplerice