0

基本上,我从表中获取元素的 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
4

1 回答 1

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
于 2013-07-10T22:53:52.550 回答