使用Ruby pg gem,向数据库添加潜在空值的最佳方法是什么?

使用Ruby pg gem,向数据库添加潜在空值的最佳方法是什么?,ruby,postgresql,pg,Ruby,Postgresql,Pg,我正在尝试向数据库添加一个对象,如下所示: DB.exec("INSERT INTO patients (name, birthdate) VALUES ('#{name}', '#{birthdate}');") 问题是,如果这些值中的任何一个为nil,则数据将被错误保存,或者将出现语法错误 我可以使用if语句发送不同的SQL语句,具体取决于每个值是否为零,但这似乎很难看,我想知道如何更好地执行此操作。用于构建带有占位符的准备语句: DB.prepare('new_patient', 'in

我正在尝试向数据库添加一个对象,如下所示:

DB.exec("INSERT INTO patients (name, birthdate) VALUES ('#{name}', '#{birthdate}');")
问题是,如果这些值中的任何一个为nil,则数据将被错误保存,或者将出现语法错误

我可以使用if语句发送不同的SQL语句,具体取决于每个值是否为零,但这似乎很难看,我想知道如何更好地执行此操作。

用于构建带有占位符的准备语句:

DB.prepare('new_patient', 'insert into patients (name, birthdate) values ($1, $2)')
请注意,这使用了编号参数,因此

。。。绑定参数在SQL查询中表示为$1、$1、$2等

而不是位置?您可能会使用的参数

然后使用执行准备好的语句并提供参数值,然后:

DB.exec_prepared('new_patient', [ name, birthdate ])
exec_prepared的接口有点奇怪,因为它需要显式数组中的参数

现在,如果name.nil?然后在name列中会得到一个NULL,如果birthdate.nil?您将在“生日”列中获得空值


如果您发现自己在SQL语句中编写{…},请再想一想,几乎总有更好、更安全的方法。

如果一个或两个值都为NULL,您想怎么做?是否使用占位符值运行插入?运行完全不同的语句?没有行动?