2

我有模型ticket.rb。这个模型有 :number 列。我决定制定一种方法,应该通过票号的前 7 位在数据库中搜索票。我不知道如何对数据库进行 Active Record 查询以实现我的目标。我试过了

ticket = Ticket.where("(/^\S{7}) number = ?", "#{n}")

但这没有任何意义,搜索了两天的答案。

4

1 回答 1

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}%'")

如果您需要更多帮助,请告诉我。

于 2013-09-18T11:30:31.827 回答