0
我在我的網站上搜索,今天我發現如果一個帖子有例如像「implicaciónen el proyecto」這樣的描述,我嘗試用單詞「implicacion」來找到這個帖子,沒有口音,我沒有得到任何結果,但是如果我用帶口音的字母「implicación」來嘗試,我找到了帖子。搜索沒有口音的口音搜索詞
如何修復此搜索,即使用戶使用沒有口音的單詞,我也需要找到帖子。
這是我的模型的實際搜索。我正在使用postgresql進行生產。
find(:all, :conditions => ['title LIKE ? OR title LIKE ? OR description LIKE ? OR description LIKE ?', "%#{search}%", "%#{search.capitalize}%", "%#{search}%", "%#{search.capitalize}%"])
在此先感謝您的幫助
編輯
private
def pg_strip_accents(field)
"<<EOS
translate(
LOWER(#{field}),
'âãäåāăąÁÂÃÄÅĀĂĄèééêëēĕėęěĒĔĖĘĚìíîïìĩīĭÌÍÎÏÌĨĪĬóôõöōŏőÒÓÔÕÖŌŎŐùúûüũūŭůÙÚÛÜŨŪŬŮ',
'aaaaaaaaaaaaaaaeeeeeeeeeeeeeeeiiiiiiiiiiiiiiiiooooooooooooooouuuuuuuuuuuuuuuu'
)
EOS"
end
def self.search(search)
if search.present?
where("#{pg_strip_accents('title')} LIKE :search OR #{pg_strip_accents('description')} LIKE :search",
:search => "%#{search.downcase}%")
else
find(:all)
end
end
PinnyM我得到這個錯誤未定義的方法'pg_strip_accents'。我正在嘗試使用ruby代碼 – Jean
由於您在類方法中調用它,所以'pg_strip_accents'方法需要可以訪問類本身。嘗試將其定義爲'def self.pg_strip_accents(field)'。更好的是,你可以把它放在一個單獨的模塊中,並擴展任何類以使用'extend ModuleName'使用該模塊。 – PinnyM
此外,方法開始和結尾的''EOS'和'EOS'標記代替引號(使用塊語法) - 您應該刪除現在在那裏的引號,並確保最終的EOS '標記是行中的第一個字符(在它們之前沒有空格)。或者,刪除這些標記和所有換行符,以使整個字符串與周圍的引號合在一行上。 – PinnyM