我在驗證多個字段時遇到了一些問題,特別是區分大小寫的唯一驗證以及錯誤消息。多個字段的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