Отображать запись последовательно с каждым обновлением - PullRequest
0 голосов
/ 21 января 2011

У меня есть приложение Rails 3, которое в настоящее время показывает одну «случайную» запись при каждом обновлении, однако, оно повторяет записи слишком часто или никогда не будет показывать определенную запись. Мне было интересно, как можно было бы перебирать каждую запись и отображать ее так, чтобы все отображалось до того, как все будет повторено. Я думал как-то использовать куки или session_ids для последовательного просмотра идентификаторов записей, но я не уверен, будет ли это работать правильно, или как именно это сделать.

База данных состоит из одной таблицы с одним столбцом, и в настоящее время только около 25 записей, но будет добавлено больше. Идентификаторы генерируются автоматически и являются последовательными.

Буду признателен за некоторые предложения.

Спасибо.

Ответы [ 2 ]

1 голос
/ 21 января 2011

Забавная вещь о «случайном» состоит в том, что он обычно не чувствует себя случайным, когда вы получаете один и тот же ответ дважды подряд.

Обычный ответ на эту проблему - создать очередь ответов и убедиться, что при добавлении записей в очередь их еще нет в очереди. Это может быть либо очередь записей, которые вы будете возвращать пользователю, либо очередь записей, которые у вас уже возвращены пользователю. Мне нравится ваша идея использовать идентификаторы записей, но только с 25 записями этот повторяющийся цикл также будет раздражать. :)

Вы можете отслеживать очередь предыдущих записей в memcached, если у вас уже есть одна развернутая или вы можете вставить очередь в сеанс (вероятно, это будет всего пять или шесть целых чисел, не слишком большая передача данных) или база данных.

Я думаю, что я бы избегал базы данных, потому что она не обязательно должна быть постоянной, ей не нужно брать пропускную способность базы данных или время вычислений, и использование базы данных только для отслеживания пяти или шести целых чисел кажется глупо. :)

UPDATE:

В одном из ваших контроллеров (возможно, ApplicationController) добавьте что-то вроде этого в метод, который вы запускаете в before_filter:

class ApplicationController <  ActionController::Base
    before_filter :find_quip
    def find_quip:
        last_quip_id = session[:quip_id] || Quips.find(:first).id
        new_quip_id = Quips.find(last_quip.id + 1).id || Quips.find(:first)
        session[:quip_id] = new_quip
    end
end

Я не очень доволен кодом, который нужно обернуть, когда у тебя кончились клеветы; он полностью облажается, если в последовательности есть дыра. Что, вероятно, когда-нибудь случится. И это начнется с номера 2. Но я слишком устал, чтобы разобраться. :)

0 голосов
/ 21 января 2011

Если их будет не слишком много, как вы сказали, вы можете сохранить весь массив идентификаторов как переменную сеанса с другой переменной для текущего индекса и последовательно просматривать их, увеличивая индекс.

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