смещение и ограничение с учетом верхнего уровня с драгоценным камнем предков

Я пишу простую систему доски объявлений. Одна вещь о родословной заключается в том, что она использует один вызов, поэтому, если я позвоню с лимитом и смещением, она не вернет согласованный список элементов верхнего уровня. Мне нужны @per_page и the_offset для обработки разбиения на страницы.

Итак, у меня сейчас есть что-то вроде этого:

@posts=MbPost.where('forum_id=?',params[:id]).offset(the_offset).limit(@per_page).order('updated_at desc')

но нужно, чтобы смещение и @per_page отражали верхний уровень (т.е. родословная равна NULL), а не общее количество элементов.

Любая идея о том, как это сделать?

спасибо заранее


person timpone    schedule 14.12.2012    source источник


Ответы (1)


Вы не сможете сделать это с помощью одного запроса к БД.

Причина в том, что, скажем, с нумерацией страниц 10, вы хотите показать 10 сообщений верхнего уровня (на самом деле, скажем, 15 сообщений), но на следующей странице для еще 10 сообщений верхнего уровня вы можете показать 20 фактических сообщений. Таким образом, размер страницы разные.

Другой способ справиться с этим - иметь два запроса: один для фактической страницы с: ancestry is null и применять лимит и смещение. Затем другой запрос извлекает все сообщения, которые являются дочерними элементами любого уровня сообщений, которые у вас есть в предыдущем запросе.

person Rahul garg    schedule 14.12.2012
comment
Спасибо за ответ. Да, я начал со второй идеи — и просто назначал ее. Кажется, это немного впустую; надо будет подумать. Мы используем act_as_tree в другой части, и я думаю использовать именно это. - person timpone; 15.12.2012