Rails:检查控制器中是否存在ID?

时间:2013-12-29 01:22:30

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

是否可以执行以下操作:

if @user = User.friendly.find(params[:id])
    // logic here
else
    // do something if user doesn't exist
end

由于某种原因,这会引发以下错误:

ActiveRecord::RecordNotFound

2 个答案:

答案 0 :(得分:4)

This is as expected

  

[The] RecordNotFound [引发异常]没有记录响应find方法。具有给定ID的行不存在或行不符合其他限制。有些查找调用[如find_by*方法]不会引发此异常,表示未找到任何内容。

使用find_by_id(或find_by),如果找不到该项,将返回nil

friendly.find_by_id params[:id]
friendly.find_by id: params[:id]

另请参阅:Rails find getting ActiveRecord::RecordNotFound

答案 1 :(得分:1)

根据Rails find getting ActiveRecord::RecordNotFound的建议,我会使用开头/结尾,因为.find 假设引发异常:

begin
  @user = User.friendly.find(params[:id])
  # rest of code...
rescue ActiveRecord::RecordNotFound => e
  # other code; @user will automatically be nil since unassigned
end

但这确实是个人偏好的问题。