參數email_or_phone_number來自一個客戶端,我需要這個認證。然而,該機型擁有電子郵件和電話號碼分別領域。如何解析電子郵件或電話號碼參數?
什麼是解析email_or_phone_number屬性以正確的方式,這樣的話我可以用find_by找到用戶?
find_by(email: email, phone_number: phone_number)
如果它的數量,那麼它應該成爲PHONE_NUMBER,但如果它不是,那麼這應該是一個電子郵件。
參數email_or_phone_number來自一個客戶端,我需要這個認證。然而,該機型擁有電子郵件和電話號碼分別領域。如何解析電子郵件或電話號碼參數?
什麼是解析email_or_phone_number屬性以正確的方式,這樣的話我可以用find_by找到用戶?
find_by(email: email, phone_number: phone_number)
如果它的數量,那麼它應該成爲PHONE_NUMBER,但如果它不是,那麼這應該是一個電子郵件。
你的問題簡單的可讀的解決辦法是使用或查詢
Mongoid
User.where(email: params[:email_or_phone_number])
.or(phone_number: params[:email_or_phone_number])
.first
UPDATE活動記錄
User.where(email: params[:email_or_phone_number])
.or(User.where(phone_number: params[:email_or_phone_number]))
另一種方法,可以使用一個正則表達式用於識別Email Format或params[:email_or_phone_number]
值Phone Number Format但我還沒有遇到任何其在識別有格式的情況下,充分證明。
你可以用正則表達式分割電子郵件或電話號碼。
x = {email_or_phone_number:"3333"}
x[:email_or_phone_number].match(/^\d+/)
如果x是零,那麼
x[:email_or_phone_number].match(/\A([\w+\-]\.?)[email protected][a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i)
其他:無效的輸入!保存結果,並通過資源來find_by
假設所需的行爲是尋找123
都[email protected]
(電子郵件)比賽和123123123
(電話號碼),然後正確的查詢將是:
User.where('email ILIKE :q OR phone ILIKE :q',
q: "%#{params[:email_or_phone]}%")
我不知道你的數據庫是什麼,但請記住,這個查詢可能在較大的數據集上表現不佳。如果是這種情況,我建議你看看pg_trgm
(Postgres-only)或全文搜索解決方案。
ArgumentError(您已將Hash對象傳遞給#or。代替傳入ActiveRecord :: Relation對象): –
上述語法與ODM ie Mongoid –
你可以嘗試|| User.where(電子郵件:PARAMS [:email_or_phone_number]) 。或(User.where(PHONE_NUMBER:PARAMS [:email_or_phone_number])) –