6

如何在获取之前检查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

4 回答 4

17

作为friendly_idgem 的最新版本,您可以说:

Book.friendly.exists? params[:book_id]
于 2014-10-01T05:13:57.583 回答
5

从 RecordNotFound 异常中救援 ==>

def book
  @book = Book.find(params[:book_id])
  #OK
rescue ActiveRecord::RecordNotFound => e
  head :not_found
end
于 2011-03-13T17:27:51.713 回答
2

我建议您像我一样将 Deepak N 的解决方案移至模型:

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

所以现在它会通过 id 和 slug 来获取你的书,并且不会抛出异常,就像标准的 AR 方法 #find_by_id 一样。
顺便说一句,根据文档#exists?现在的方法是检查记录存在的正确方法!

于 2012-03-20T15:18:15.130 回答
-2
@book = Book.find_by_id(params[:book_id])
if @book
  # OK
else
  #404 not found
enв
于 2011-03-13T15:24:20.227 回答