基本上我从表中获取元素的id并将其插入另一个元素中。
vuln_id = ActiveRecord::Base.connection.execute("SELECT FROM BLAH WHERE ...")
pid = vuln_id.first
puts "=============================="
puts pid # this echos the ID
puts "=============================="
if pid.empty?
puts "pid is empty"
end
rd = Report.new(:plugin_id => pid, :report_id => report_id)
rd.save()
在Rails控制台中,当我这样做时
Report.dbaction(params)
它运行模型,这是输出
(0.3ms) SELECT STATEMENT.....
==============================
186
==============================
(3.0ms) BEGIN
SQL (0.3ms) INSERT INTO `report_data` (`created_at`, `report_id`, `updated_at`) VALUES ('2013-07-10 22:03:59', 6, '2013-07-10 22:03:59')
(33.9ms) COMMIT
它插入report_id
但它不会将pid
值插入数据库,即使它存在。为什么是这样?
快速编辑:plugin_id肯定存在于表中。我三重检查。
以下是模型文件的其余部分
class Report < ActiveRecord::Base
belongs_to :site
has_many :plugins
答案 0 :(得分:1)
您从第1行的数据库查询中获得了第一个结果,但我相信execute
会返回包含您选择的所有列的数组。您可能需要:pid = vuln_id.first[0]
或类似内容(或pid = vuln_id[0][0]
或pid = vuln_id.first.first
)。
您还应验证查询是否返回任何内容,以便整行可能类似于:
pid = vuln_id.first.first if vuln_id and vuln_id.count > 0