插件模型:
class Plugin < ActiveRecord::Base
has_many :vulns
end
Vuln模型:
class Vuln < ActiveRecord::Base
belongs_to :plugin
end
插件表:
create_table "plugins", force: true do |t|
t.string "name"
end
Vuln表:
create_table "vulns", force: true do |t|
t.string "title"
t.integer "plugin_id"
t.string "vulnerability_type"
t.string "fixed_in"
end
当我使用rails c
使用rails控制台并输入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中执行此查询时,它会显示来自其所有内容的所有内容。对于每个插件,数据库中至少有一个或多个vuln。
这就是问题所在:如何让它从两个表(插件和版本)中获取内容而不仅仅是插件?
答案 0 :(得分: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"