红宝石2.2。 :将参数传递给config yaml文件中的SQL请求字符串

时间:2015-03-23 17:06:01

标签: ruby yaml

给出配置文件config.yml

# config.yml
folders:
   tree: 
    top: "SELECT * FROM mytable WHERE name = 'alpha'"
    bottom: "SELECT * FROM mytable WHERE name = '#{name}'"

当我执行ruby脚本时:

# myscript1.rb
@config = YAML::load_file File.join( @rundir, 'config.yml')
....
@db.execute(@config['folders']['tree']['top'])

正确执行db select .. 我应该如何编写我的ruby命令来运行第二个请求,将'name'作为参数传递?

# myscript2.rb
@config = YAML::load_file File.join( @rundir, 'config.yml')
....
name = "beta"
@db.execute(@config['folders']['tree']['bottom']) # need parameter ?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

对于我熟悉的Ruby DB接口,您可以将参数传递给execute,这些参数将被SQL转义并在?标记的点处插入到查询中。因此,首先要将查询重写为:SELECT * FROM mytable WHERE name = ?;。然后,您可以致电@db.execute(@config['folders']['tree']['bottom'], name)。与Ruby字符串插值相比,这还具有确保正确转义任何不可信参数的优势。