2017-09-06 86 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%'之类的状态,等等 –