我有三个模型: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
答案 0 :(得分:3)
为什么不使用has_many :through?
class ImpactEvaluation < ActiveRecord::Base
has_many :sites
has_many :mv_plans, through: :sites
end
之后,您应该只需致电ImpactEvaluation.find(4).mv_plans
答案 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)