調用模型的地方(...)方法比方說,我有兩個型號:客戶端和產品如何從ApplicationController中
的「用戶名」和客戶端的「電子郵件」應爲「唯一索引」,作爲「序列號「的產品
當用戶在唯一索引的表單字段上鍵入時,我有一個onblur函數,它向控制器發送具有屬性名稱和屬性值的請求。如果存在值,則立即通知用戶。
在ClientController中,我編寫了一個函數來檢查它是否唯一,並返回-2表示錯誤,-1表示不存在,或者表示存在正數(id)。
def unique
if params[:attrName].blank? or params[:attrValue].blank?
id = "-2"
else
cli = Client.where("#{params[:attrName]} = '#{params[:attrValue]}'").first
if cli != nil
id = cli["id"]
else
id = "-1"
end
end
render :json => {
:id => id
}
end
這是不好的原因有很多(SQL注入漏洞,違反乾的,因爲每個控制器將具有基本相同的方法。
我想寫內ApplicationController中「獨一無二」的功能,但正如你在上面看到的那樣,如果它是一個客戶端,我應該能夠調用「Client.where」,或者如果它是一個產品,我應該能夠調用「Product.where」。我怎樣才能以最「一般」的方式構建這個功能, ?我正在考慮原始SQL,但我認爲這是一種天真的方法。
這是你的目標嗎?創建產品時,將「用戶名」和「電子郵件」組合成產品表中保存的「序列號」類型唯一索引。您的願望是確保如果同一用戶試圖創建另一個產品,任何產品,他們將被停止,因爲該用戶名和電子郵件已被用於創建產品。而且你沒有使用模型主動記錄關係來完成這個邏輯。是這樣嗎? – Elvn
號碼「用戶名」和「電子郵件」與「產品」無關。它們是「獨特索引」屬性的例子。這就像您在創建電子郵件帳戶時一樣,並且在您輸入所需的電子郵件時,您會立即得到有關其可用性的反饋。這是因爲當你鍵入時,電子郵件字符串被髮送到服務器,並檢查它是否已經存在於數據庫中。請閱讀@yez答案,因爲它顯示我正在努力完成的任務 – Aleksandrus
好的。謝謝。我只是想知道。 – Elvn