2013-04-10 4 views
0

Вот мои модели:Rails пытается присоединиться к 3 таблицы

class Template < ActiveRecord::Base 
    has_many :application_fields 
    has_many :application_fields_values 
end 

class ApplicationField < ActiveRecord::Base 
    belongs_to :template 
    has_many :application_fields_values 
end 

class ApplicationFieldsValue < ActiveRecord::Base 
    belongs_to :application_field 
end 

Вот запрос я пытаюсь достичь:

SELECT `application_fields_values`.* , `application_fields`.*, `templates`.* 
FROM `application_fields_values` 
    INNER JOIN `application_fields` ON `application_fields`.`id` = `application_fields_values`.`application_field_id` 
    inner join `templates` on `templates`.`id` = `application_fields`.`template_id` 

Вот что я получил:

@report = ApplicationFieldsValue.joins(:application_field, :template) 

Но это дает мне ошибку:

Association named 'template' was not found; perhaps you misspelled it? 

Как я могу выполнить запрос выше, используя активную запись?

+0

попытайтесь плюрализовать имя (имена) – Zippie

+0

Что должно оценивать '@ result'? Должны ли они быть экземплярами ApplicationFieldsValue? Или вы хотите, чтобы хэш со значениями из всех объединенных таблиц? –

+0

Мне нужны значения somes из каждой таблицы, поэтому, чтобы сделать мой запрос короче для этого вопроса, я просто использовал все таблицы. *. – Catfish

ответ

1

Я не уверен, что ваша цель с вашим целевым запросом, потому что он выбирает все поля из всех вовлеченных таблиц. Что вы ожидаете от @result?

Я думаю, что это похоже на то, как вы хотите, чтобы ваши отношения были настроены.

class Template < ActiveRecord::Base 
    has_many :application_fields 
    has_many :application_fields_values, :through => :application_fields 
end 

class ApplicationField < ActiveRecord::Base 
    belongs_to :template 
    has_many :application_fields_values 
end 

class ApplicationFieldsValue < ActiveRecord::Base 
    belongs_to :application_field 
    has_one :template, :through => :application_field 
end 
+0

Большое спасибо. Работает как шарм. – Catfish

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