Ruby on rails RubyonRails报告通过可访问端口创建

Ruby on rails RubyonRails报告通过可访问端口创建,ruby-on-rails,ruby,Ruby On Rails,Ruby,遍历数据库中的findings表,并检查端口是否与上面创建的openports数组匹配。如果存在匹配项,我们将根据查找表中的给定值创建一个新报告 问题是即使存在匹配项,也不会创建新报告 非常感谢您的帮助。不确定这是否有帮助,但我想向您展示如何稍微清理一下实现 Finding.all.each do |p| openPorts.each do |y| if p.port == y Report.create(:port =&g

遍历数据库中的findings表,并检查端口是否与上面创建的openports数组匹配。如果存在匹配项,我们将根据查找表中的给定值创建一个新报告

问题是即使存在匹配项,也不会创建新报告


非常感谢您的帮助。

不确定这是否有帮助,但我想向您展示如何稍微清理一下实现

Finding.all.each do |p|
        openPorts.each do |y|
            if p.port == y
                Report.create(:port => p.port, 
                              :risk_rating => p.risk_rating, 
                              :finding => p.finding,
                              :implication => p.implication, 
                              :recommendation => p.recommendation)  
            end
        end
    end
让我们从顶部开始

Stringsplit返回一个数组,因此无需将其推入新数组。但是,它确实创建了一个字符串数组,因此如果您需要整数映射&:to_,我将为您执行此操作。我假设这是当前的问题,即字符串与整数的比较,例如80==80=>false

下一步,与其循环所有的发现,为什么不拿出一个匹配的端口呢?Finding.whereport:open\u ports这将从\u open\u ports\u数组中的findings where findings.port生成类似SELECT findings.*的查询


然后,我们只是从这个有限的列表中创建报告,而不是通过所有发现进行循环,然后通过开放端口进行循环。

很抱歉延迟回复,在重新考虑后进行了排序,但您的答案接近于更改的内容其他一些小错误,谢谢。
Finding.all.each do |p|
        openPorts.each do |y|
            if p.port == y
                Report.create(:port => p.port, 
                              :risk_rating => p.risk_rating, 
                              :finding => p.finding,
                              :implication => p.implication, 
                              :recommendation => p.recommendation)  
            end
        end
    end
host = Host.find(i)
# I am assuming Finding#port is an Integer
# if Finding#port is a String then just remove the .map(&:to_i) portion 
open_ports = host.open_ports.split(",").map(&:to_i)
Finding.where(port: open_ports).each do |p|
  Report.create(:port => p.port, 
                :risk_rating => p.risk_rating, 
                :finding => p.finding,
                :implication => p.implication, 
                :recommendation => p.recommendation)  
end