Направляющие: “Затем отправьте” и “Предыдущее сообщение” ссылки в моем выставочном представлении, как к?

Исключения должны только быть возвращены, где что-то происходит, который Вы не ожидали.

другая точка исключений, исторически, то, что коды возврата являются по сути собственными, иногда 0 мог быть возвращен из функции C для указания на успех, иногда-1, или любого из них для сбоя с 1 для успеха. Даже когда они перечисляются, перечисления могут быть неоднозначными.

Исключения могут также предоставить намного больше информации и конкретно обстоятельно объяснить хорошо, 'Что-то Пошло не так, как надо, вот то, что, отслеживание стека и некоторая информация о поддержке для контекста'

Однако хорошо перечислимый код возврата может быть полезен для известного набора результатов, простые 'наймы n результаты функции, и это просто выполнило этот путь'

25
задан John Topley 14 August 2009 в 10:34
поделиться

4 ответа

Если каждый заголовок уникален и вам нужен алфавитный алфавит, попробуйте это в своей модели Post .

def previous_post
  self.class.first(:conditions => ["title < ?", title], :order => "title desc")
end

def next_post
  self.class.first(:conditions => ["title > ?", title], :order => "title asc")
end

Затем вы можете ссылаться на них в представлении.

<%= link_to("Previous Post", @post.previous_post) if @post.previous_post %>
<%= link_to("Next Post", @post.next_post) if @post.next_post %>

Не проверено , но он должен приблизить вас. Вы можете изменить заголовок на любой уникальный атрибут ( created_at , id и т. Д.), Если вам нужен другой порядок сортировки.

43
ответ дан 28 November 2019 в 18:27
поделиться

Вот как я это сделал. Во-первых, добавьте пару именованных областей к вашей модели Post :

def previous
  Post.find_by_id(id - 1, :select => 'title, slug etc...')
end

def next
  Post.find_by_id(id + 1, :select => 'title, slug etc...')
end

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

Затем в моем posts_helper у меня есть этот метод:

def sidebar_navigation_links
  next_post = @post.next
  previous_post = @post.previous
  links = ''
  if previous_post
    links << content_tag(:h3, 'Previous')
    links << content_tag(:ul, content_tag(:li,
                              content_tag(:a, previous_post.title,
                                          :href => previous_post.permalink)))
  end
  if next_post
    links << content_tag(:h3, 'Next', :class => 'next') if previous_post
    links << content_tag(:h3, 'Next') if previous_post.nil?
    links << content_tag(:ul, content_tag(:li,
                              content_tag(:a, next_post.title,
                                          :href => next_post.permalink)))
  end
  content_tag(:div, links)
end

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

Важным моментом является использование операторов if , потому что если вы используете первый пост, тогда они не будут предыдущим постом, и наоборот, если вы на последнем посте, они не будут следующим постом.

Наконец, просто вызовите вспомогательный метод из вашего представления:

<%= sidebar_navigation_links %>
1
ответ дан 28 November 2019 в 18:27
поделиться

Попробуйте will_paginate Gem. Он предоставляет все функции, необходимые для разбивки ваших записей на страницы. изучите здесь тоже

Вы также можете посмотреть здесь , например, код, если вы хотите добавить следующие и предыдущие кнопки.

0
ответ дан 28 November 2019 в 18:27
поделиться

Вам просто нужно выполнить 2 запроса, по одному для каждого из «prev» и «next». Предположим, у вас есть столбец created_at.

Псевдо-код:

# get prev
select * from posts where created_at < #{this_post.created_at} order by created_at desc limit 1

# get next
select * from posts where created_at > #{this_post.created_at} order by created_at desc limit 1

Конечно, «this_post» - это текущее сообщение.

Если ваши сообщения хранятся в столбце auto_increment, и вы не используете повторно идентификаторы, вы можете просто использовать столбец id вместо created_at - столбец id уже должен быть проиндексирован. Если вы хотите использовать столбец created_at, вам обязательно понадобится индекс для этого столбца.

-1
ответ дан 28 November 2019 в 18:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: