2009-08-04 3 views
0

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

То, что я пытался до сих пор:

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

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

  1. pagin , в том числе will_paginate, но неясно, может ли это помочь в том же фрагменте страницы?
  2. сборники ...?

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

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

Спасибо!

ответ

0

will_paginate будет делать работу, просто передать на странице вы хотите:

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

Что касается второго вопроса, то просто создать модель-каналы (или лавировать его на существующий). Затем используйте метод, который извлекает последние записи из других моделей и сортирует их по дате created_at. Я бы, вероятно, применил метод #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 

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

+0

Спасибо! Я сталкиваюсь с некоторыми другими проблемами, получающими will_paginate для работы, но они отправлены в группу will_paginate. Будучи новичком, ох, так утомительно ...;) Подход подачи имеет смысл в текущем масштабе. Спасибо за указатель! – 2009-08-05 23:59:03