Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 授权用户以便他们只能查看自己的对象_Ruby On Rails_Devise_Authorization - Fatal编程技术网

Ruby on rails 授权用户以便他们只能查看自己的对象

Ruby on rails 授权用户以便他们只能查看自己的对象,ruby-on-rails,devise,authorization,Ruby On Rails,Devise,Authorization,我有一个用户模型,用户有很多病人。用户应该只能查看自己的患者 实现这一点的最佳方式是什么 这里是我原来的病人表演动作。这允许任何登录用户查看任何患者: def show @patient = Patient.find(params[:id]) @assessments = @patient.assessments end 我可以切换到下面,但随后我会看到一个错误页面(未找到患者id),我不确定这是否是处理该问题的最佳方法: def show @patient =

我有一个用户模型,用户有很多病人。用户应该只能查看自己的患者

实现这一点的最佳方式是什么

这里是我原来的病人表演动作。这允许任何登录用户查看任何患者:

 def show
    @patient = Patient.find(params[:id])
    @assessments = @patient.assessments
  end
我可以切换到下面,但随后我会看到一个错误页面(未找到患者id),我不确定这是否是处理该问题的最佳方法:

 def show
    @patient = current_user.patients.find(params[:id])
    @assessments = @patient.assessments
  end
处理这种简单授权的最佳方法是什么?没什么特别的,只是希望用户只能查看和编辑他们自己的东西


编辑

以下是我在尝试访问其他用户的患者时遇到的错误:

Couldn't find Patient with 'id'=27 [WHERE "patients"."user_id" = ?]
相反,我更愿意向用户显示一条快闪消息,说明他们未经授权。

def show

 @patient = Patient.where(id: params[:id],user_id: current_user.id)
 @assessments = @patient.assessments
结束


此处,@pateint将给出当前登录用户的所有患者,@assessment将给出与患者相关的评估。

您走对了,您能显示您的show action参数吗这应该有效。你能显示错误信息吗?你想通过参数传递什么?患者id??我认为您应该使用
exists?
,因为如果传递了不属于当前用户的患者id,它将返回患者id nil。我猜关联没有正确完成,您可以向我们显示关联。用户有多个:患者和多个:评估。患者属于:用户,并有多个:评估。评估属于:用户,并且属于:评估。如果用户试图访问受限制的患者,我希望向他们显示一条自定义的flash消息,而不是rails错误页面“找不到'id'=27[其中“patients.”“user_id=?]”