2017-09-06 139 views
1

我在查詢一個activerecord模型枚舉並在where方法中使用like運算符,它只是不起作用。是否有一些技巧可以讓我以這種方式查詢枚舉?在常規欄目上正常工作。它在控制檯中。rails 5 enum where「like」

普通字符串列(標題)以下

irb(main):092:0> Proposal.select(:id,:department,:status).where('title like "test%"') 
Proposal Load (0.3ms) SELECT "proposals"."id", "proposals"."department", "proposals"."status" FROM "proposals" WHERE (title like "test%") LIMIT ? [["LIMIT", 11]] 
=> #<ActiveRecord::Relation [#<Proposal id: 7, department: 1, status: "In Progress">, #<Proposal id: 61, department: 2, status: "Won">]> 

工作原理如圖所示。然而,嘗試它枚舉,沒有給出結果。

irb(main):094:0> Proposal.select(:department,:status).where('status like "Wo%"') 
Proposal Load (0.3ms) SELECT "proposals"."department", "proposals"."status" FROM "proposals" WHERE (status like "Wo%") LIMIT ? [["LIMIT", 11]] 
=> #<ActiveRecord::Relation []> 

任何想法,爲什麼我不能像運算符上使用枚舉?我試圖用這個過濾一個視圖與datatables.net服務器端處理。

回答

1

Enum將數據存儲爲類似於0,1,2,3的整數...然後,將數字映射到模型中定義的枚舉值。這就是爲什麼你沒有得到結果的原因

+0

所以Proposal.where(「title like'Coat%'」)在字符串列上工作,但不是枚舉,因爲enum的整數值在db中, .where方法不具有任何有關枚舉的知識?這是相當有限的。猜猜唯一的選擇是將它移動到模型而不是枚舉 –

+0

我不明白你爲什麼要在你的情況下使用'like'。當你定義枚舉時,你有幾個字符串/符號列表,你可以用這種方式構建查詢:'Proposal.where(title:%i [title1 title2 title3])'。如果標題只是自定義字符串,則不要使用枚舉。 –

+0

我在提案的索引視圖上顯示狀態,並使用datatables.net我可以對任何字段(除枚舉字段外)進行部分搜索。能夠鍵入pend並讓它過濾掉待處理的提議將會很好。由於我在數據表上使用服務器端處理,因此我必須將搜索結果作爲「像'%pend%'之類的名稱或'%pend%'之類的狀態,等等 –