2011-09-20 4 views
0

Я застрял в последнем упражнении в книге Хартлта 12.3.4, где вы определяете фид состояния для себя и пользователей, которых вы следите. Я новичок Rails, поэтому просто дайте мне знать, если мне нужно опубликовать дополнительную информацию.Работа над рельсами 3 учебник от hartl и застрял на 12.3.4 - Новый фид состояния

Когда я заканчиваю журнал разработки, я вижу, что 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). Харлит использует переменную «follow_ids» вместо «follow_id» s». В исходном примере кода, который вы можете загрузить со своего сайта, имя переменной «follow_ids», и я пробовал это в обоих направлениях, но он терпит неудачу.

Нижняя строка - журнал регистрации dev will_paginate извлекает первую партию данных, но никогда не возвращается к базе данных для получения дополнительных данных.

Может ли кто-нибудь предложить, на что я могу взглянуть, чтобы решить мою проблему?

Большое спасибо.

ответ

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 

 Смежные вопросы

  • Нет связанных вопросов^_^