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.
我知道这是旧的,但我刚刚发现了这一点,我想提出一种处理这种情况的不同方法.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)
| 归档时间: |
|
| 查看次数: |
13505 次 |
| 最近记录: |