我有一张有很多预订的餐馆的桌子。现在我想查询所有餐馆,如果他们有 2 人的预订,它应该预加载这些关联。如果没有 2 的预订,它仍应返回餐厅,但关联为空。
为此,我尝试了以下查询:
Restaurant.eager_load(:reservations).where("number_of_people = ?", 2)
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为它会丢弃所有有预订但都不是 2 人的餐厅。
所以我想做的是将该条件移动到连接条件中。就像是:
Restaurant.joins('LEFT OUTER JOIN \"reservations\" ON \"reservations\".\"restaurant_id\" = \"restaurants\".\"id\" AND \"reservations\".\"number_of_people\" = ?', 2)
Run Code Online (Sandbox Code Playgroud)
这将给出我需要的结果,但是这不是预加载“保留”关联而是导致 N+1 问题。
似乎eager_load 不接受自定义查询。我找到了这些线程:https : //github.com/rails/rails/issues/12270和JOIN ON ... AND 在 ActiveRecord 中急切加载关联时的条件,但没有提供解决方案。
我需要在我们的 Spotify 应用程序中使用轮换。为此,我使用以下 CSS:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
@-webkit-keyframes rotate {
from {
-webkit-transform: rotate(0deg);
}
to {
-webkit-transform: rotate(360deg);
}
}
#entity {
background-color: #000;
width: 200px;
height: 200px;
-webkit-animation: rotate 3s infinite linear;
}
</style>
</head>
<body>
<div id="entity"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在 Chrome (26.0.1410.43) 中,CPU 使用率没有大的变化(~3%)。但是在 Spotify 0.8.8.459.g4430eae7 中,我的 CPU 使用率一直在 50% 到 100% 之间。除了这段代码之外,Spotify 的原生负载抖动器也会发生同样的情况。我的电脑是 MacBook Pro 2.5 GHz Intel Core i5,8 GB 1600 Mhz DDR3 主内存,Mac OS 10.8.1。如何以更少的 CPU 使用率实现这种轮换?