2016-08-29 37 views
0

所以我在此刻有这个在我的控制器:轨在控制器的解决方法每种方法重置

popular = Impression.select('impressionable_id, count(impressionable_id) as total').group('impressionable_id').order('total desc') 
popular.each do |popevents| 
    @events = Event.where(id: popevents.impressionable_id) 
end 

基本上,这一切正在做的是选择被保存在印象表中最受欢迎的活动,并让所有的事件信息。

所以,在我看来,我有这样的:

<% @events.each do |e| %> 
    <pre> 
    <%= e.eventname %> 
    </pre> 
    <% end %> 

我期待在这里看到周围4-5事件名称,但是我只能看见1。我猜它,因为@events是重置?

这将是什么工作?

山姆

+0

你可以添加你的模型代码吗?我目前没有得到你们的关系。 – siegy22

+0

“@ events.length”给你带来了什么? –

回答

4

是的,你可以这样做:

@events = popular.flat_map do |popevents| 
    Event.where(id: popevents.impressionable_id) 
end 

它会给你的事件的完整列表。但这是非常低效的;因为它将为每个id运行一个查询。

一个更好的办法是:

@events = Event.where(id: popular.map(&:impressionable_id)) 

这将做到这一切在一个查询。