【发布时间】:2016-05-11 04:32:25
【问题描述】:
我有一个奇怪的情况。这是我的模型:
UpcCode
=> UpcCode(id: integer, Upc: string, Sku: string, Active: boolean, created_at:日期时间,updated_at:日期时间)
如您所见,Sku 是我的专栏之一。
当我输入 IRC 时:
UpcCode.where(:Sku => 'SKU123').first
我得到了预期的结果:
UpcCode 加载 (0.9ms) SELECT "upc_codes".* FROM "upc_codes" WHERE "upc_codes"."Sku" = $1 ORDER BY "upc_codes"."id" ASC LIMIT 1 [["Sku", "GC-115-42"]] => #
<UpcCode id: 95, Upc: "70163098XXXX", Sku: "SKU123", Active: true, created_at: "2016-05-11 03:12:11", updated_at: "2016-05-11 03:12:11">
但是当我尝试使用以下语法时:
UpcCode.where("Sku = 'SKU123'").first
或
UpcCode.where('Sku = "GC-115-42"').first
我收到以下错误,好像 Sku 列不存在。
UpcCode 加载 (5.2ms) SELECT "upc_codes".* FROM "upc_codes" WHERE (Sku = “GC-115-42”)按“upc_codes”排序。“id”ASC 限制 1 ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column “sku”不存在
我需要能够使用第二种语法,因为我需要操纵结果。即不区分大小写的比较。
【问题讨论】:
-
所有不在双引号中的标识符都在 PG 中转换为小写,因为您的列名
Sku被转换为sku所以它给出了这个问题,您可以将其用作UpcCode.where('"Sku" = ?','SKU123' ) -
@VishalJAIN 成功了。谢谢。
标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord