在hartl上使用rails 3教程并坚持使用12.3.4 - 新状态Feed

时间:2011-09-20 18:55:59

标签: ruby-on-rails-3 railstutorial.org

我坚持哈特尔特书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检索第一批数据,但它永远不会返回数据库以获取其他数据。

有人可以建议我可以看一下解决我的问题吗?

非常感谢。

1 个答案:

答案 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