【问题标题】:How to make Active Record query that allows to find by part of value如何进行允许按部分值查找的 Active Record 查询
【发布时间】:2013-09-18 08:15:19
【问题描述】:
我有模型ticket.rb。这个模型有 :number 列。
我决定制定一种方法,应该通过票号的前 7 位数字在数据库中搜索票。我不知道如何对数据库进行 Active Record 查询以实现我的目标。
我试过了
ticket = Ticket.where("(/^\S{7}) number = ?", "#{n}")
但是这没有意义,搜索了两天的答案。
【问题讨论】:
标签:
postgresql
activerecord
ruby-on-rails-4
【解决方案1】:
米莎,
应该这样做:
# Makes numbers like '123' become '0000123'
# or takes first 7 digits if number is longer than 7 digits:
n = sprintf("%07d", n).first(7)
# Searches for anything starting with those 7 digits.
tickets = Ticket.where("number like '#{n}%'")
如果您认为数据库中只有一张这样的票,请使用 find_by 而不是 where:
ticket = Ticket.find_by("number like '#{n}%'")
如果您的 number 字段不是字符串,而是数字,您需要通过以下方式进行类型转换:
ticket = Ticket.find_by("CAST(number AS varchar) like '#{n}%'")
如果您需要更多帮助,请告诉我。