1
我目前有一个需要11秒才能加载的页面。我使用Bullet Gem来帮助我找到N + 1查询发生的位置。它给我一些输出,但我真的不知道该怎么办。下面是子弹输出:实现急切加载以停止N + 1 - Rails
GET /events/1679/dashboard
USE eager loading detected
RSVP => [:tickets]
Add to your finder: :includes => [:tickets]
Call stack
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/decorators/rsvp_decorator.rb:54:in `tickets?'
/Users/cameronbass/Desktop/Work/blackbird-rsvp/app/views/accepted_rsvps/_list.html.erb:33:in `block in _app_views_accepted_rsvps__list_html_erb___1211423417683052584_70339569780320'
而且它告诉我把它放在这条线
def tickets?
rsvp.tickets.any?
end
这里是联想:
has_many :tickets, through: :attendees
attendee.rb
has_one :ticket
通常这指的是迭代这些东西的列表,并在每个列表上调用“门票?”。该代码没有显示,但大概你有一个多元列表......无论这些是什么。 – tadman
看看你的日志!当你看到数据库多次被一次请求命中时,你可能有N + 1的情况。您可以使用预先加载来代替只敲一次数据库来获取关联的表,然后加载记录。 – bkunzi01
当我看到这样的问题时,我觉得有必要链接到这个答案:http://stackoverflow.com/a/26251892/525478。因人而异 –