为 Sequel 禁用双下划线行为

Disable double underscore behaviour for Sequel

如何禁用 Sequel 的双下划线行为?

我使用遗留数据库架构,其中有很多名称中带有“__”的列。

db[:abc].insert({vector_a__c: "356"})
Sequel::DatabaseError: PG::UndefinedColumn: ERROR:  column "vector_a" of relation "abc" does not exist
LINE 1: INSERT INTO "abc" ("vector_a"."c") VALUES ('356') RETURNING ...

当您将列名称作为字符串而非符号传输时,双下划线行为将被禁用。

例如:

db[:abc].insert({"vector_a__c" => "356"})

一般来说,您希望将其包装在标识符中:

db[:abc].insert(Sequel.identifier(:vector_a__c) => "356")

使用字符串作为标识符仅在极少数情况下适用于向后兼容,在这种情况下它是明确的(即 SQL 字符串无效)。