Как обрабатывать в представлениях модель, принадлежащую другому, и учитывая ее идентификатор, представление должно отображать различную информацию?

Сейчас я делаю веб-сайт, и мне нужно реализовать эту функцию, так как тип пользователя "Клиент" принадлежит Компании, поэтому, когда он входит в систему, Клиент должен видеть представление об этой компании, я не уверен, как с этим справиться, потому что он должен увидеть идентификатор маршрута компании, например, сейчас, если пользователь имеет тип администратора, я создал для него пространство имен, но это потому, что каждый администратор может видеть одну и ту же информацию, тип клиента должен видеть только ту компанию, к которой он принадлежит. я не уверен, что я должен использовать, сейчас мой маршрут для этого определен так

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

Это работает, но, например, если Клиент принадлежит компании Amazon и он входит в систему, он перенаправляется на компании / Amazon / клиенты, и он отображает правильную информацию, но если он меняет маршрут для другого, например, компании / Adaddasdas / клиентов, это На странице Stills также отображается страница с информацией amazon, которая просто происходит, если я пытаюсь получить доступ к ресурсам внутри таких компаний, как: клиенты в этом примере, если я пытаюсь получить доступ к ресурсам самих компаний companies / amazon, если я добавлю что-то другое не работает

Я хочу знать, как вы, ребята, справляетесь с этим, когда пользовательская модель принадлежит другой, но с учетом идентификатора (в моем случае slug) другой модели, пользователь должен иметь возможность видеть только информацию этого идентификатора и как ну и другие ресурсы для этой модели. Должен ли я использовать это или пространство имен, или пользовательский макет, я не уверен, как решить это, и нет документации по этой теме.

1 ответ

Решение

Как объяснено в комментариях, вы можете выполнить базовую проверку владения на вашем клиентском контроллере:

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

Также вы можете сначала проверить, существует ли клиент. Если кто-то введет идентификатор клиента, который не существует, он вызовет ошибку при предыдущей проверке (Client.find(params[:id]) не удастся).

Другие вопросы по тегам