Rails 3 - 如果没有找到记录,如何不出错

Woz*_*Poz 22 ruby-on-rails ruby-on-rails-3

在我的权限控制器中,我使用Active记录来查找权限:

@permission = Permission.find(params[:user_id])
Run Code Online (Sandbox Code Playgroud)

如果这返回结果我然后查找permission.name并将其传递给我的控制器.

问题有时候这会导致结果,其他情况则不然.如果没有,则会出错.我怎样才能防止这种情况发生?

使用案例:1.如果用户确实有权限记录,请显示并让用户更改2.如果没有,请显示他们没有权限记录并允许用户设置权限.

谢谢

Mat*_*ggs 49

@permission = Permission.find_by_id params[:user_id]
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果你使用的是"第一个param是id"版本的find,你就知道你在寻找什么,如果它不存在,那就是一个问题.如果你使用一个更通用的finder语法(比如find_by_field_name),假设如果它不在那里,那是一个可接受的情况,所以只返回nil.

  • `@permission = Permission.find_by(id:params [:user_id])`现在. (7认同)

cle*_*lem 9

我知道这是旧的,但我刚刚发现了这一点,我想提出一种处理这种情况的不同方法.ActiveRecord::RecordNotFound没什么好害怕的.用户可以传入有效的记录ID,但该记录可能不属于他们(即,如果您执行类似的操作current_user.widgets.find(params[:id])).我喜欢像这样处理它:

def show
  begin
    @permission = Permission.find(params[:user_id])
  rescue ActiveRecord::RecordNotFound
    # however you want to respond to it
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 通过错误测试通常是一个坏主意,但我给了你一个upvote来显示另一种方法. (2认同)