使用activerecord执行简单的select - where操作时,
ActiveRecord::Base.connection.execute('select * from spree_variants where sku = "1SB-E4196-00";')
我得到这个错误:
from /Users/abc/.rvm/gems/ruby-2.7.2@cboparts/gems/activerecord-6.0.3.5/lib/active_record/connection_adapters/postgresql/database_statements.rb:92:in `exec'
Caused by PG::UndefinedColumn: ERROR: column "1SB-E4196-00" does not exist
LINE 1: select * from spree_variants where sku = "1SB-E4196-00";
为什么考虑"1SB-E4196-00"
作为列而不是SKU?这个错误似乎有误导性。
因为PostgreSQL期望字符串用单引号括起来。而双引号有不同的含义:
还有第二种标识符:带分隔符或引号的标识符。它是由双引号(")中包含的任意字符序列组成的。分隔符始终是标识符,而不是关键字。
这意味着如果以下查询应该工作:
ActiveRecord::Base.connection.execute(
"select * from spree_variants where sku = '1SB-E4196-00';"
)
顺便说一句,如果你正在使用Rails并且有一个SpreeVariant
模型,那么你可以在控制台中看到Rails如何格式化和转义这样的查询:
puts SpreeVariant.where(sku: '1SB-E4196-00').to_sql