【问题标题】: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}")

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

【问题讨论】:

  • 您是否在查询中尝试过类似运算符
  • 是的,LIKE 运算符正是我要找的,谢谢您的建议

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

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

【讨论】:

    猜你喜欢
    • 2013-02-27
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    相关资源
    最近更新 更多