【问题标题】:Limit not working as expected in Rails3限制在 Rails3 中无法按预期工作
【发布时间】:2011-01-23 22:06:31
【问题描述】:

我的实践控制器索引方法中有以下代码:

@practices = @activity.practices.order('created_at DESC').limit(20)

不幸的是,限制调用不起作用,@practices 返回 >20 个对象。我确信这是一件很容易解决的事情,但我不确定我做错了什么。我似乎正在按照文档中规定的方式使用这种方法..

我尝试在订单调用之前调用限制,结果相同。

更新

SQL 日志:

Practice Load (1.6ms)  SELECT "practices".* FROM "practices" WHERE ("practices".activity_id = 9) ORDER BY practiced_on DESC, created_at DESC LIMIT 20

但是,在日志的后面,我发现了这个:

   Rendered practices/_practice.html.erb (216.9ms)
  Activity Load (0.6ms)  SELECT "activities".* FROM "activities" WHERE ("activities".user_id = 1)
  Practice Load (0.8ms)  SELECT "practices".* FROM "practices" WHERE ("practices".activity_id = 8) ORDER BY practiced_on DESC
  CACHE (0.0ms)  SELECT "practices".* FROM "practices" WHERE ("practices".activity_id = 9) ORDER BY practiced_on DESC

这让我认为部分不接受正确的集合。部分被称为:

<%= render @activity.practices %>

有什么建议吗?

TIA

【问题讨论】:

    标签: ruby-on-rails-3 limit


    【解决方案1】:

    看起来您正在正确返回有限集合并将其存储在 @practices 实例变量中。

    但是,您正在使用 @activity.practices 渲染您的部分,这将触发整个无限实践集合的延迟加载,因为该集合尚未加载到 @activity 对象上。

    答案

    &lt;%= render @practices %&gt; 应该可以工作。

    奖金回合

    最后,如果您想要一些更“面向对象”的东西,您可以将您的“有限”查询放入一个名为“recent_practices”的范围内,这样您就可以调用:

    &lt;%= render :partial =&gt; 'practices', :object =&gt; @activity.recent_practices %&gt;

    上面的示例将在部分内部使用名为“recent_practices”的局部变量,而不是实例变量。

    更多关于ActiveRecord scopes here

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2019-07-02
      • 2015-04-16
      • 1970-01-01
      • 2022-08-15
      • 2013-12-23
      • 2014-12-09
      • 2016-01-13
      • 2020-09-21
      相关资源
      最近更新 更多