2014-02-07 22 views
1

我有三種模型:ImpactEvaluation,Site,MvPlan。如何在rails中查詢雙重嵌套資源

ImpactEvaluation has_many Sites 
Site has_one MvPlan 

在我的模型ImpactEvaluation一行代碼,我希望能夠查詢所有這下單影響評價屬於MvPlans。這意味着它必須檢查所有影響評估下的網站,然後檢查具有相同網站ID的所有MvPlans。在rails語法中查詢這個最優雅的方法是什麼?

我試着在這裏發佈的解決方案: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計劃,因爲每個影響評估都有多個站點......不確定這個問題 – 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)