禁用续集的双下划线行为

时间:2015-03-30 16:26:38

标签: ruby sequel pg sequel-gem

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

我使用遗留数据库架构,其中我有很多列" __"在名字中。

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 ...

2 个答案:

答案 0 :(得分:3)

通常,您希望将其包装在标识符中:

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

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

答案 1 :(得分:1)

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

例如:

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