在我的权限控制器中,我使用活动记录来查找权限:
@permission = Permission.find(params[:user_id])如果返回结果,我就查找permission.name并将其传递给我的控制器。
问题是,这有时会返回结果,但有时不会。如果没有,它就会出错。我怎样才能防止这种情况发生呢?
使用案例: 1.如果用户有权限记录,显示出来,让用户修改2.如果没有,显示没有权限记录,允许用户设置权限。
谢谢
发布于 2010-10-12 05:43:30
@permission = Permission.find_by_id params[:user_id]这个想法是,如果你正在使用find的"first param is The id“版本,你就知道你在寻找什么,如果它不在那里,那就是一个问题。如果使用一种更通用的查找器语法(如find_by_field_name),则假设它不在那里,这是一种可以接受的情况,因此只需返回nil。
发布于 2012-10-20 09:09:26
我知道这很古老,但我只是发现了这一点,我想建议一种不同的方式来处理这种情况。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发布于 2010-10-12 05:46:18
带有int参数的ActiveRecord#find是一个目标查找。如果找不到记录,Rails将引发RecordNotFound。
这与使用带有:first或:all等参数的find不同,后者更像是一种搜索;在这些情况下,如果没有记录,Rails将返回nil。如果要避免引发异常,请使用这些选项之一或相应的方法名称。
示例:
@permission = Permission.find(:first, :id => params[:id])https://stackoverflow.com/questions/3910131
复制相似问题