2014-02-07 6 views
1

У меня есть три модели: ImpactEvaluation, Site, MvPlan.Как запросить двойной вложенный ресурс в рельсах

ImpactEvaluation has_many Sites 
Site has_one MvPlan 

В одной строке кода в моей модели ImpactEvaluation, я хочу, чтобы иметь возможность запросить все MvPlans, которые подпадают под этой единой оценки воздействия. Это означает, что он должен будет проверить все сайты под этой оценкой воздействия, а затем все MvPlans с одним и тем же идентификатором сайта. что является самым элегантным способом запроса этого в синтаксисе рельсов?

Я попытался сделать решение, размещенное здесь: Rails Active Record Query for Double Nested Joins with a Select Call, но оно не работает. Я пытаюсь выполнить эти команды в моей консоли.

> mv_plans_id = [] 
> Site.where(impact_evaluation_id: 4).mv_plans.collect{|u| mv_plans_id << u.id} puts mv_plans_id 
> SyntaxError: (irb):16: syntax error, unexpected tIDENTIFIER, expecting $end 

ответ

2

Почему бы не использовать has_many :through?

class ImpactEvaluation < ActiveRecord::Base 
    has_many :sites 
    has_many :mv_plans, through: :sites 
end 

После того, что вы должны иметь возможность просто позвонить ImpactEvaluation.find(4).mv_plans

См has_many :through

+0

должно быть has_many, хотя на каждом сайте есть только один mv_plan? каждая оценка воздействия технически имеет много планов mv, потому что у каждого есть несколько сайтов ... unsure об этом – MoB

+0

Похоже, ваш ответ работает отлично. Спасибо. – MoB

0

попробовать этот

Site.where(impact_evaluation_id: 4).each do { |site| mv_plans_id << site.mv_plan.pluck(:id) } 
0
mv_plans_id=ImpactEvaluation.find(4).sites.map(&:mvplan_id) 
Смежные вопросы