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

Ruby on rails 如何在属于另一个模型且给定其ID的视图中处理视图,该视图应显示不同的信息?,ruby-on-rails,ruby-on-rails-5,nested-routes,Ruby On Rails,Ruby On Rails 5,Nested Routes,现在我正在制作一个网站,我需要实现这个功能一个用户类型的客户端属于一家公司,所以当它登录时,客户端应该看到一个关于该公司的视图,我不确定如何处理这个问题,因为他应该看到公司的路由ID,例如,现在如果用户是管理员类型,我为其创建了一个名称空间,但这是因为每个管理员都可以看到相同的信息,客户端类型应该只看到他所属的公司,我不确定应该使用什么,现在我的路径定义如下 resources :companies, param: :slug, only: :show do resources :clien

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

resources :companies, param: :slug, only: :show do
  resources :clients
end
这是可行的,但例如,如果客户属于亚马逊公司,他登录,他被重定向到companys/amazon/clients,它会显示正确的信息,但如果他更改另一个公司的路径,例如companys/adaddasdas/clients,它仍然会显示页面以及亚马逊信息,如果我试图访问公司内部的资源,比如:本例中的客户,如果我试图访问资源公司本身,公司/亚马逊,如果我放了一些不同的东西,它就不起作用了


我想知道的是,当一个用户模型属于另一个模型,但考虑到另一个模型的Idin my case 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,它将在上一个检查客户端上触发一个错误。findparams[:ID]将不会成功。

这没什么大不了的。只需在客户端控制器中创建一个before操作,比较客户端母公司您从参数中获取客户端Id,然后使用find方法检索客户端记录,然后爬升到传递到url中的公司的父公司您从参数中获取slug,然后试着用methid的find找到一家有同样的slug的公司,然后与你刚从客户那里找到的进行比较。实际上,当我有多个参数的路由时,我也会做这个检查。在其他检查的基础上。感谢这解决了我的问题,最后我放弃了Slug,我只使用了id,但是你能告诉我为什么我会收到这个params客户端/客户端,action=>index,company\u id=>1}允许:false>我的意思是company\u id是一个字符串,所以我需要执行params[:company\u id].我想知道为什么我会像收到弦一样收到它?我不太确定你的问题。但基本上所有参数都是字符串。它们直接从querystring/URL获取,并显示为这样。我的任务可能是多余的,只是一种习惯。如果您明确地想要一个整数,那么如果您确定您的id是一个包含数字的字符串,那么“yes to_i”很有用。如果它是一个看起来不像数字的纯字符串,您将得到0:hello123.to_i在控制台中返回0。