2

私はモデル ticket.rb を持っています。このモデルには :number 列があります。チケット番号の最初の 7 桁でデータベース内のチケットを検索するメソッドを作成することにしました。目標を達成するために、データベースで Active Record クエリを作成する方法がわかりません。私はもう試した

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

しかし、これは意味がありません。答えを2日間検索しました。

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

データベースにそのようなチケットが1つしかないと思われる場合は、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 に答える