rails friendly_id并检查条目是否存在

时间:2011-03-13 14:36:07

标签: ruby-on-rails ruby friendly-id

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

答案 0 :(得分:16)

friendly_id gem的最新版本开始,您可以说:

Book.friendly.exists? params[:book_id]

答案 1 :(得分:5)

从RecordNotFound例外救援==>

def book
  @book = Book.find(params[:book_id])
  #OK
rescue ActiveRecord::RecordNotFound => e
  head :not_found
end

答案 2 :(得分:1)

我建议你像我一样将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一样。
BTW,根据documentation #exists?  方法现在是检查记录存在的正确方法!

答案 3 :(得分:-1)

@book = Book.find_by_id(params[:book_id])
if @book
  # OK
else
  #404 not found
enв