如何在rails中查询双嵌套资源

时间:2014-02-07 19:40:04

标签: ruby-on-rails ruby-on-rails-3

我有三个模型:ImpactEvaluation,Site,MvPlan。

 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  

3 个答案:

答案 0 :(得分:3)

为什么不使用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

答案 1 :(得分:0)

试试这个

Site.where(impact_evaluation_id: 4).each do { |site| mv_plans_id << site.mv_plan.pluck(:id) }

答案 2 :(得分:0)

mv_plans_id=ImpactEvaluation.find(4).sites.map(&:mvplan_id)