0

插件型号:

class Plugin < ActiveRecord::Base
    has_many :vulns
end

漏洞模型:

class Vuln < ActiveRecord::Base
    belongs_to :plugin
end

插件表:

create_table "plugins", force: true do |t|
    t.string "name"
end

漏洞表:

create_table "vulns", force: true do |t|
    t.string  "title"
    t.integer "plugin_id"
    t.string  "vulnerability_type"
    t.string  "fixed_in"
end

当我使用 rails 控制台rails c并输入Plugin.select("*").joins(:vulns)时,它只会从插件表中获取数据

#<ActiveRecord::Relation [#<Plugin id: 1, name: "xxx">, #<Plugin id: 2, name: "xxx">

这是查询:

SELECT * FROM `plugins` INNER JOIN `vulns` ON `vulns`.`plugin_id` = `plugins`.`id`

但是,当我在 mysql 中执行此查询时,它会显示来自 vulns 和插件的所有内容,就像它应该显示的那样。对于每个插件,数据库中至少有一个或多个漏洞。

所以这里的问题是:我如何让它从两个表(插件和 vulns)中获取内容,而不仅仅是插件?

4

1 回答 1

1

值在vulns那里,只是没有显示,因为您正在使用Plugin模型进行选择,即Plugin.select("*").joins(:vulns).

如果您执行以下操作,您将获得值:

> plugin = Plugin.select("*").joins(:vulns)
> plugin.first.title 
=> "mytitle"

因为您正在通过Plugin模型进行查询,所以您会看到Plugin对象。

另一种测试方法是执行以下操作:

> plugin = Plugin.select([:name, :title]).joins(:vulns)
=> #<ActiveRecord::Relation [#<Plugin id: 1, name: "xxxx">]>

# It won't show you title even though it's there
> plugin.title
=> "mytitle"
于 2013-08-23T18:40:45.817 回答