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

How to handle a in the views a model that belongs to another and given its ID the view should display different info?

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

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

这行得通,但是例如,如果客户属于亚马逊公司并且他登录了,他将被重定向到 companies/amazon/clients,它会显示正确的信息,但是如果他更改了另一个路线,例如 companies/adaddasdas/clients,它仍然显示页面以及亚马逊信息,如果我试图访问公司内部的资源,就会发生这种情况就像这个例子中的 :clients 一样,如果我尝试访问资源公司本身 companies/amazon 如果我输入不同的内容它就不起作用

我想知道的是,当一个用户模型属于另一个用户模型但给出了 other 模型的 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]) 不会成功)。