Ruby on rails 其中(:sku=>'sku123')与其中('sku=
我有一个奇怪的情况。这是我的模型:Ruby on rails 其中(:sku=>'sku123')与其中('sku=,ruby-on-rails,ruby,postgresql,ruby-on-rails-4,activerecord,Ruby On Rails,Ruby,Postgresql,Ruby On Rails 4,Activerecord,我有一个奇怪的情况。这是我的模型: UpcCode =>UpcCodeid:integer,Upc:string,Sku:string,Active:boolean, 创建时间:datetime,更新时间:datetime 如您所见,Sku是我的专栏之一 当我输入IRC时: UpcCode.where(:Sku => 'SKU123').first 我得到了预期的结果: upc代码加载0.9ms从upc_代码中选择upc_代码。*,其中 upc_code.Sku=$1订单按upc_co
UpcCode
=>UpcCodeid:integer,Upc:string,Sku:string,Active:boolean,
创建时间:datetime,更新时间:datetime
如您所见,Sku是我的专栏之一
当我输入IRC时:
UpcCode.where(:Sku => 'SKU123').first
我得到了预期的结果:
upc代码加载0.9ms从upc_代码中选择upc_代码。*,其中
upc_code.Sku=$1订单按upc_code.id ASC限额1
[[Sku,GC-115-42]=>
但当我尝试使用以下语法时:
UpcCode.where("Sku = 'SKU123'").first
或
我得到以下错误,好像Sku列不存在一样
upc代码加载5.2ms从upc_代码中选择upc_代码。*,其中
Sku=GC-115-42按upc_代码订购。id ASC限制1
ActiveRecord::语句无效:PG::UnfinedColumn:错误:column
sku不存在
我需要能够使用第二种语法,因为我需要操纵结果。例如,不区分大小写的比较。尝试如下:
UpcCode.where("'upc_codes'.'Sku' = 'SKU123'").first
试着这样做:
UpcCode.where("'upc_codes'.'Sku' = 'SKU123'").first
或者你也可以这样做
the_sku = 'SKU123'
UpcCode.where("Sku = ?", the_sku).first
更新:
PG需要将区分大小写的列名用双引号括起来
使用?的好处是,它可以防止SQL注入
看
我的建议
您应该遵循不区分大小写的列名的约定。
在Rails中,我们遵循社区惯例,原因如下
它使您的代码对未来的合作者更具可预测性
你将在社区维基上更快更容易地得到答案;你不必长时间地好奇
约定优于配置是我们Rails社区最强大的一点。
...
或者你也可以这样做
the_sku = 'SKU123'
UpcCode.where("Sku = ?", the_sku).first
更新:
PG需要将区分大小写的列名用双引号括起来
使用?的好处是,它可以防止SQL注入
看
我的建议
您应该遵循不区分大小写的列名的约定。
在Rails中,我们遵循社区惯例,原因如下
它使您的代码对未来的合作者更具可预测性
你将在社区维基上更快更容易地得到答案;你不必长时间地好奇
约定优于配置是我们Rails社区最强大的一点。
...
所有不在双引号中的标识符都将转换为PG中的小写,因此您的列名Sku将转换为Sku,因此您可以尝试以下方法:
UpcCode.where('"Sku" = ?','SKU123' )
所有不在双引号中的标识符都将转换为PG中的小写,因此您的列名Sku将转换为Sku,因此您可以尝试以下方法:
UpcCode.where('"Sku" = ?','SKU123' )
所有不在双引号中的标识符都将转换为小写,您的列名Sku将转换为Sku,因此您可以将此问题用作UpcCode。其中“Sku=?”,“SKU123”@VishalJAIN起作用。谢谢。所有不在双引号中的标识符将转换为小写,您的列名Sku ge将在PG中t转换为sku,因此它给出了这个问题,您可以将其用作UpcCode。其中'sku=?','SKU123'@VishalJAIN有效。谢谢。希望我可以对这个答案进行两次UPVOT。一次用于sql注入警告,一次用于约定优于配置。希望我可以对这个答案进行两次UPVOT。一次用于sql注入警告,一次用于约定优于配置配置