如何在视图中处理属于另一个模型的模型,并给定其 ID 视图应显示不同的信息?



现在我正在制作一个网站,我需要实现此功能 用户类型 客户端属于公司,所以当它登录时,客户端应该看到有关该公司的视图,我不确定如何处理这个问题,因为他应该看到公司路由 ID,例如,现在如果用户是管理员类型,我为它创建了一个命名空间,但这是因为每个管理员都可以看到相同的信息,客户端类型应该只看到他所属的公司,我不确定我应该使用什么,现在我的路线是这样定义的

resources :companies, param: :slug, only: :show do
resources :clients
end

这有效,但例如,如果客户属于亚马逊公司并且他登录,他被重定向到公司/亚马逊/客户,它会显示正确的信息,但如果他将路线更改为另一个公司/adaddasdas/客户,它仍然会显示带有亚马逊信息的页面,如果我尝试访问公司内部的资源,就会发生这种情况,例如:在这个例子中的客户,如果我尝试访问资源公司本身的公司/亚马逊,如果我放一些不同的东西,它不起作用

我想知道的是你们如何处理,当一个用户模型属于另一个模型但给定另一个模型的 Id(在我的例子中是 slug(时,用户应该能够只看到该 Id 的信息以及该模型的其他资源。我应该使用它或命名空间或自定义布局,我不确定如何解决它,并且没有关于该主题的文档。

如注释中所述,您可以在客户端控制器中进行基本的所有权检查:

class Client < ApplicationController
before_action :check_client_owner
private 
def check_client_owner
unless params[:slug].to_s == Client.find(params[:id]).company.slug.to_s
redirect_to root_path
end
end
end

您也可以先检查客户端是否存在。如果有人键入不存在的客户端 ID,它将在上一次检查时触发错误(Client.find(params[:id])不会成功(。

最新更新