Rails:使用.join()从多个表中选择

时间:2013-07-11 17:16:05

标签: mysql ruby-on-rails activerecord

插件型号:

class Plugin < ActiveRecord::Base
    belongs_to :report
    has_many :vulns
end

Vulns模特:

class Vuln < ActiveRecord::Base
    belongs_to :plugins
end

我在rails中执行以下操作:

#using * for now to select everything    
@data = Plugin.select("*").joins(:vulns).where('plugins.id'=> plugin.plugin_id)

终端中的以下查询:

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

这是正确的查询,但它不会从vulns表中选择内容。我知道这是正确的查询,因为我在phpmyadmin中尝试了它,它也在vulns表上返回了数据。当我在rails中使用它时(使用<%= debug(@data) %>)它只显示插件表中的内容。

如何让它从vulns表中选择所有内容? (每个插件都有多个漏洞)

1 个答案:

答案 0 :(得分:0)

显然,您不能拥有名称为“type”的列。

如果有人遇到类似问题,请重命名名为“type”的列。我生成了一个新的迁移:

rails g migration RenameColumnOnVulnsTable

然后添加以下内容:

def change
  rename_column :vulns, :type, :vulnerability_type
end

现在查询工作正常。