Active Record Query奇怪的行为

时间:2015-12-02 16:08:50

标签: ruby-on-rails ruby activerecord

情况见下面的截图:

enter image description here

如您所见,我调用 $check_login = mysqli_query($con, "SELECT username FROM users WHERE email ='$uemail' AND password ='$upass'"); if(mysqli_num_rows($check_login) ==1) { $get = mysqli_fetch_array($check_login); $_SESSION['username2'] = $get['username']; 从数据库中获取前10个对象,但只有在我调用Property.limit(10)变量时才会执行查询。我不明白为什么不打电话。然后它将在视图中调用并减慢渲染速度。令人惊讶的是,它将在@properties部分调用,但它根本不包含_filter变量。发生了什么事?

enter image description here

同时,@propertiesCity.all在控制器中执行。怎么会发生?

1 个答案:

答案 0 :(得分:2)

Property.limit(10)不会像您期望的那样从数据库加载10个属性。它只返回ActiveRecord::Relation

当您在该Relation对象上调用实际需要该数据库中的数据的方法时(例如,调用counteach),就会发生数据库查询。

这是默认的ActiveRecord行为。它不会减慢任何速度,因为如果在控制器或视图中加载数据,它不会影响总体响应时间。

详细了解Relations and Lazy Evaluation