rails在控制器变通方法中重置每个方法

时间:2016-08-29 12:56:57

标签: ruby-on-rails

所以我现在在控制器中有这个:

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正在重置?

对此有什么用?

萨姆

1 个答案:

答案 0 :(得分:4)

是的,你可以这样做:

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

它会为您提供完整的活动列表。但这效率很低;因为它将为每个id运行一个查询。

更好的方法是:

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

将在一个查询中完成所有操作。