2013-08-23 2 views
0

модели для плагин:Rails 4 .joins() проблема - не работает

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 и введите Plugin.select("*").joins(:vulns) это только подхваты данные из таблицы Plugin

#<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, то показывает весь контент от вулнов и плагинов, как предполагалось. Для каждого плагина в базе данных по крайней мере один или несколько вулканов.

Так что вот вопрос: Как его получить, чтобы получать контент из обеих таблиц (плагины и вульвы) вместо плагинов?

+0

В основном рельсы возврата атрибутов только из (FIRST) таблицы ЛЕВЫЙ в виде массива Duplicable объектов. – Mohanraj

ответ

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" 
+0

Это имеет смысл, спасибо за ответ! – Kush

Смежные вопросы