0

我被困在 Hartlt book 12.3.4 中的最后一个练习中,您可以在其中为自己和您关注的用户定义状态提要。我是 Rails 新手,所以如果我需要发布更多信息,请告诉我。

当我跟踪开发日志时,我可以看到 will_paginate 触发 SQL 以收集初始记录,并且初始页面在提供时看起来很好。当我单击链接转到任何其他页面时,似乎 will_paginate 不会触发 SQL 以从数据库中检索更多数据,因为下一页服务器正常,但没有数据。

开发日志中也没有新条目,也许我错了,但我认为这表明 will_paginate 没有命中数据库。

我试图在下面包含所有相关的代码片段。很高兴发送任何丢失的东西。

这是我的 pages_controller.rb

def home
  @title = "Home"
  if signed_in?
    @micropost = Micropost.new
    @feed_items = current_user.feed.paginate(:page => params[:page])
  end
end

这是我的 user.rb

def feed
  Micropost.from_users_followed_by(self)
end

这是我的 microposts.rb

scope :from_users_followed_by, lambda { |user| followed_by(user) }

private

def self.followed_by(user)
  following_ids = %(SELECT followed_id FROM relationships
                    WHERE follower_id = :user_id)
  where("user_id IN (#{following_ids}) OR user_id = :user_id",
        :user_id => user)
end

注意:在视频教程(第 12 章,时间 = 02:06:00)和书(第 517 页,清单 12.44)中,Harlt 使用变量“followed_ids”而不是“following_ids”。在您可以从他的网站下载的原始示例代码中,变量名称是“following_ids”,我已经尝试过两种方式 - 但它失败了。

底线 - 开发日志显示 will_paginate 检索第一批数据,但它永远不会返回数据库以获取其他数据。

谁能建议我可以看看什么来解决我的问题?

非常感谢。

4

1 回答 1

0

您的记录多于一页吗?

如果不是,则可能是will_paginate先进行计数。然后决定不加载任何记录。

进入控制台并尝试一下。

$ rails console

user = User.find(23)
# the same user you're logged in as

user.feed.count
# is it more than one page?

user.feed.paginate(:page => 1)
# 20 records?

user.feed.paginate(:page => 2)
# nothing?


还:

在您的示例scope :from_users_followed_by, lambda { |user| followed_by(user) }中是多余的。

你也可以说;

def feed
  Micropost.followed_by(self)
end
于 2011-12-10T03:44:21.453 回答