создание следующей ссылки, но (id + 1) запись может отсутствовать в базе данных - PullRequest
1 голос
/ 28 мая 2011

, поэтому я хочу, чтобы страница отображала Phrase, выбирая (изначально) случайным образом из базы данных.на этой странице я хочу <%= link_to "next"%>, но мне было интересно, существует ли эффективный способ обеспечить существование следующей записи

, в настоящее время я использую только

# @phrase is current phrase   
<%= link_to "next", phrase_path( Phrase.find( @phrase.id + 1 ) ) %>

да, язнаю, что я должен вызвать @next из контроллера, или, что еще лучше, иметь следующий метод в модели для вызова @ фразу.next, но это только для иллюстрации.

, но это часто приводит к ActiveRecord::RecordNotFoundошибка, потому что некоторые фразы были удалены из БД (из-за модерации, ошибки и т. д.).Я мог бы спасти от этого и зациклить, пока он не заработает в контроллере, затем передать его или что-то в этом роде, но это кажется плохим решением, и не особенно «railsy»

, есть ли удобное решение, которое кто-нибудь нашел

понял это

на основе эта ссылка, которая немного устарела, использует named_scope со спины в рельсах 2. Сначала я переписал ее, используя новые рельсы 3scope стиль, но затем просто изменил его на метод.только что использовал

def next 
   Phrase.where("id > ?", self.id).order("id ASC").first
end

def previous
   Phrase.where("id < ?", self.id).order("id DESC").first
end

Ответы [ 3 ]

2 голосов
/ 28 мая 2011

Попробуйте создать следующую / предыдущую область для вашей модели, как предложено в http://steve.dynedge.co.uk/2010/01/13/random-previous-and-next-entries-from-active-record-models-using-offset/

Это позволит вам сделать что-то вроде:

Phrase.next(5) or Phrase.next(@phrase.id)
1 голос
/ 28 мая 2011

Почему бы вам не создать метод в контроллере с именем next и передать идентификатор текущей записи. Оттуда было бы тривиально перенаправить пользователя обратно на страницу показа для этого следующего ресурса.

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

0 голосов
/ 28 мая 2011

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

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