我正在試驗一些概念(實際上是通過構建1978年數據庫WHATSIT的RoR版本來玩和學習)。從數組構建ILIKE子句
它基本上是一個has_many:通過結構與主題 - >標籤< - 價值。我試圖通過使用查詢文本字段來輸入命令來複制一些命令行結構。基本上是這樣的:What's steve's phone
。
總之,大多數搜索使用ILIKE。我雖然通過允許OR條件使用某種形式的數組來增強它。像What's steve's [son,daugher]
。我通過直接創建ILIKE子句來實現它,但不能用字符串替換。
def bracket_to_ilike(arrel,name,bracket)
bracket_array = bracket.match(/\[([^\]]+)\]/)[1].split(',')
like_clause = bracket_array.map {|i| "#{name} ILiKE '#{i}' "}.join(" OR ")
arrel.where(like_clause)
end
bracket_to_ilike(tags,'tags.name','[son,daughter]')
產生類似條款tags.name ILiKE 'son' OR tags.name ILiKE 'daughter'
而且它得到了關係,但所有人都在談論使用形式("tags.name ILiKE ? OR tags.name ? ",v1,v2,vN..)
,我以爲我會問,如果任何人有如何做任何想法那。
動態創建變量可以從我搜索的內容中獲得,但不支持。我只是想知道是否有人試圖創建一個方法,可以添加一個具有可變數字參數的where子句。我嘗試將where子句發送給關係,但它不喜歡那樣。
史蒂夫
你讓我更接近,但時間循環返回一個固定的數字,給予和連接錯誤。回到我的地圖循環並使用splat,它給出了類似於子句和變量的權利。起初它給了我一個And子句,但我認爲是因爲我的標籤實例搞砸了。 'tags.where(* [bracket_array.map {| i |「#{name} ILiKE?」} .join(「OR」),* bracket_array])'工作。現在我只需要明白爲什麼要在哪裏取數組參數。這個實驗又是爲了學習更多的Ruby。 – appleII717
@ appleII717是的,你說得對。我應該有'bracket_array.size.times.map'(缺少.map)。我更新了我的帖子。 –