Activerecord rails 5枚举中的“like”

Activerecord rails 5枚举中的“like”,activerecord,enums,ruby-on-rails-5,Activerecord,Enums,Ruby On Rails 5,我试图查询一个activerecord模型枚举,并在where方法中使用like操作符,但它就是不起作用。是否有一些技巧允许我以这种方式查询枚举?适用于常规列。在控制台里 常规字符串列标题的工作方式如下所示 irb(main):092:0> Proposal.select(:id,:department,:status).where('title like "test%"') Proposal Load (0.3ms) SELECT "proposals"."id", "proposa

我试图查询一个activerecord模型枚举,并在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 []>

知道我为什么不能在枚举上使用like运算符吗?我正试图用它来过滤带有datatables.net服务器端处理的视图。

枚举将数据存储为整数,如0,1,2,3。。。然后rails将数字映射到模型中定义的枚举值。这就是为什么您没有得到结果的原因。where title像“Coat%”一样可以在字符串列上工作,但不能在枚举上工作,因为枚举的整数值在数据库中,而.where方法对枚举一无所知?这相当有限。我猜唯一的选择是将它移动到一个模型,而不是枚举。我不明白你为什么要在你的案例中使用like。当您定义枚举时,您有几个字符串/符号的列表,您可以用这种方式构建查询。wheretitle:%i[title1 title2 title3]。如果标题只是自定义字符串,则不要使用枚举。我在建议的索引视图上显示状态,并且使用datatables.net,我可以对任何字段(枚举字段除外)进行部分搜索。这将是很好的,能够键入pend,并有它的过滤器,只是悬而未决的建议。因为我在数据表上使用服务器端处理,所以我必须按照我理解的位置名称“%pend%”或状态“%pend%”进行搜索。在这种情况下,您可以使用普通字符串,但在我看来,更好的方法是将“搜索词”与ruby中的状态匹配。然后根据匹配的状态查询数据库。您可以通过提案获得所有状态。状态不确定我是否完全理解您所说的,但我认为您建议我首先将部分状态与状态匹配,然后在where子句中使用该信息(如果匹配)