我有一个名为User
(由Devise创建)的表,以及一个类型为string的列school
。
school
的一些示例值:"0"
,"1"
,"012"
,"023"
。
我想在值中选择包含"0"
的行。类似于#include?
在Ruby中的工作方式。 E.g:
"012".include?("0") == true
"1".include?("0") == false
如何使用ActiveRecord
查询执行此操作?
答案 0 :(得分:2)
取决于您的数据库类型(MySQL,PostgreSQL ..),但基本上您可以执行以下操作:
使用' 0'返回所有值字符串中的某个地方:
User.where("school LIKE '%0%'")
仅返回前缀为' 0':
的值User.where("school LIKE '0%'")
答案 1 :(得分:0)
正如@Drenmi所述,数据库不会在整数字段中存储前导零。如果这是前导零值具有重要性的标识符或电话号码,则需要将数据存储在另一种字段类型中。
使用字符串字段存储数字。然后,您就可以使用LIKE
查询来获取所需内容。在这种情况下,以下是一种方法。
您可以使用arel和matches
方法。见How to do a LIKE query in Arel and Rails?
所以:
返回字符串中某处'0'的所有值:
users = User.arel_table
User.where(users[:school].matches('%0%'))
仅返回前缀为“0”的值:
users = User.arel_table
User.where(users[:school].matches('0%')