Показывать следующий набор результатов на странице с Rails, например, ссылку «Старые сообщения» в стиле Facebook, чтобы увидеть следующий набор новостей - PullRequest
0 голосов
/ 05 августа 2009

Я все еще довольно новичок в Rails и мне нужна ваша помощь: я создаю сайт социальной аналитики фитнеса (zednine.com), в котором есть поток активности, в котором перечислены тренировки, размещенные на сайте. Несколько страниц в настоящее время показывают 10 самых последних обновленных тренировок. Я хотел бы добавить ссылку внизу на «Старые тренировки». При щелчке должны отображаться следующие 10 тренировок на странице, сразу под первыми 10, с новой ссылкой на «Старее» ниже (теперь на странице отображается 20) - точно так же, как поток новостей в Facebook и некоторых других социальных сетях.

Что я пробовал до сих пор:

  1. В настоящее время я использую find с: limit, чтобы получить первые N результатов
  2. Я могу установить уникальную находку с: limit и: offset для каждого набора из N результатов со скрытыми div, но это плохо и плохо расширяется

Я также посмотрел на:

  1. разбиение на страницы, включая will_paginate, но не ясно, может ли это помочь при разбиении на одну и ту же страницу?
  2. коллекции ...?

Как правильно / хороший способ сделать это?

Кроме того, как я могу включить записи из нескольких таблиц в этот вид потока? Например, список может включать тренировки из одной таблицы, записи в журналах из другой, комментарии из третьей, все смешанные и отсортированные по дате?

Спасибо!

1 Ответ

0 голосов
/ 05 августа 2009

Will_paginate выполнит работу, просто перейдите на нужную страницу:

<%= link_to "Older Posts", model_route_path(:page => next_page) %>

Что касается второго вопроса, просто создайте модель Feeds (или прикрепите ее к существующей). Затем есть метод, который выбирает последние записи из различных других моделей и сортирует их по дате созданного. Я бы, вероятно, реализовал метод #recent для каждой из моделей и вызвал бы его в своем объекте Feed.

Models:

class Feed
  def index
    entries = []
    entries << Journal.recent
    entries << Comment.recent
    # etc
    entries.sort_by {|entry| entry['created_at']}
  end
end

class Journal < ActiveRecord::Base
  def recent
    self.find_all_by_created_at(:limit => 10)
  end
end

Или что-то в этом роде. Вы должны быть очень осторожны с масштабируемостью здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...