rails friendly_id и проверьте, существует ли запись - PullRequest
6 голосов
/ 13 марта 2011

Как проверить, существует ли запись friendly_id , прежде чем ее получить?

Например:

  def book
   @book = Book.find(params[:book_id])
  end

Это нормально, но я хочу проверить раньше, если friendly_id существует, что-то вроде:

def book
  if Book.exists?(params[:book_id])
    @book = Book.find(params[:book_id])
  else
    #404 not found
  end

Ответы [ 4 ]

16 голосов
/ 01 октября 2014

Начиная с последней версии камня friendly_id, вы можете сказать:

Book.friendly.exists? params[:book_id]
5 голосов
/ 13 марта 2011

Спасение от исключения RecordNotFound ==>

def book
  @book = Book.find(params[:book_id])
  #OK
rescue ActiveRecord::RecordNotFound => e
  head :not_found
end
1 голос
/ 20 марта 2012

Я предлагаю вам перенести решение Deepak N на модель, как я это сделал:

def self.find_by_friendly_id(friendly_id)
  find(friendly_id)
rescue ActiveRecord::RecordNotFound => e
  nil
end

Так что теперь он будет получать ваши книги по id и слагу и не будет генерировать исключения, как стандартный метод AR #find_by_id.
Кстати, согласно документации # существует? метод теперь правильный способ проверить наличие записи!

0 голосов
/ 13 марта 2011
@book = Book.find_by_id(params[:book_id])
if @book
  # OK
else
  #404 not found
enв
...