我坚持哈特尔特书12.3.4中的最后一个练习,你可以为自己和你所关注的用户定义状态Feed。我是一个Rails新手,所以如果我需要发布更多信息,请告诉我。
当我拖尾开发日志时,我可以看到will_paginate触发SQL来收集初始记录,并且初始页面在提供时看起来很好。当我单击链接转到任何其他页面时,看起来will_paginate不会触发SQL以从数据库中检索更多数据,因为下一页服务器正常,但没有数据。
开发日志中也没有新条目,也许我错了,但我认为这表明will_paginate没有访问数据库。
我尝试在下面包含所有相关的代码snippits。很高兴发送任何遗失的东西。
这是我的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检索第一批数据,但它永远不会返回数据库以获取其他数据。
有人可以建议我可以看一下解决我的问题吗?
非常感谢。
答案 0 :(得分: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