2014-02-11 26 views
0

在我的控制器我有:组方法中只显示一个PARAMS

@comparison = Result.group('results.trial_id').having('COUNT(results.variety_id) = 2').where('results.variety_id' => [params[:variety_one], params[:variety_two]]). 
joins(:trial).where('trials.irrigated' => params[:irrigated], 'trials.year' => params[:year]).joins(:regions).where('sites.region_id' => params[:regions]) 

当我在我的视图检查@comparison它仅示出了用于PARAMS结果[:variety_two],这是variety_id:2255和不PARAMS [ :variety_one]。为什么是这样?

输出鉴于

[#<Result id: 275428, trial_id: 1038, created_at: "2014-01-29 04:42:43", updated_at: "2014-01-29 04:42:43", variety_id: 2255, year: 2009, lint: 1559.0, turnout: 41>>] 

所以还应列出PARAMS [:variety_one],这是variety_id:2246为好。

SQL

SELECT DISTINCT results.year FROM `results` INNER JOIN `trials` ON `trials`.`trial_id` = `results`.`trial_id` INNER JOIN `trials` `trials_results_join` ON `trials_results_join`.`trial_id` = `results`.`trial_id` INNER JOIN `sites` ON `sites`.`site_id` = `trials_results_join`.`site_id` INNER JOIN `regions` ON `regions`.`region_id` = `sites`.`region_id` WHERE `results`.`variety_id` IN (2246, 2255) AND `trials`.`irrigated` IN (2) AND `trials`.`year` IN ('2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013') AND `sites`.`region_id` IN (1, 2, 3, 4, 5, 6, 7, 8) AND `results`.`year` IN (2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013) GROUP BY results.trial_id HAVING COUNT(results.variety_id) = 2 

回答

1

免责声明:我们一直在这个离线聊天,这就是我想你以后:

你想要得到的所有的ID为试验的匹配你的参数,并有这两个品种, ,然后获得那些有这两个品种的试验的所有结果?

像这样的东西(我敢肯定,这是不是最优雅的方式,并且可以收拾):

@trial_ids = Result.where(:variety_id => [params[:variety_one], params[:variety_two]]).group(:trial_id).having('COUNT(*) = 2').count.keys 

@filtered_trials = Trial.where(:trial_id => [@trial_ids]).where('trials.irrigated' => params[:irrigated], 'trials.year' => params[:year]).joins(:regions).where('sites.region_id' => params[:regions]) 

@all = Result.where(:trial_id => [@filtered_trials.map {|x| x.trial_id}]).where(variety_id: [params[:variety_one], params[:variety_two]]).select('AVG(lint) AS lint, AVG(turnout) AS turnout') 
+0

作品一种享受。谢了哥们! – Grinskull