У меня есть столбец «created_by» в таблице. Основываясь на роли зарегистрированного пользователя, я должен показать либо идентификатор пользователя, либо роль пользователя. Предположим, что пользователь, зарегистрированный по идентификатору пользователя, является клиентом, и запись была создана пользователем, у которого есть роль поддержки, тогда он должен показать «Поддержка», и если в журнале поддержки будет указан идентификатор человека, который добавил (даже если его идентификатор другого лица поддержки). Я могу выяснить роль текущего пользователя. Как я могу достичь этого, не определяя отдельную apis, основанную на роли? Возможно ли иметь тот же api, чтобы получить результаты из db на основе запроса, но преобразовать столбец на основе роли.Изменить значение атрибута на основе роли пользователя
ответ
Моя первоначальная мысль - создать view helper.
Я дам вам представление о том, как он может выглядеть. Поскольку вы не указали название модели в своем вопросе, я выбираю произвольную модель (арбузы), которая имеет отношения created-by к пользователям. Я понимаю, что это глупый выбор. Я в это загадка ...
приложение/хелперы/watermelons_helper.rb
module WatermelonsHelper
def created_by_based_on_role(watermelon)
if current_user.role == "Support" || watermelon.created_by.role == "Generic User"
watermelon.created_by.name
else
"The Watermelons.com Support Team"
end
end
end
приложение/контроллеры/watermelons_controller.rb
class WatermelonsController < Application Controller
def show
@watermelon = Watermelon.find(params[:watermelon_id])
end
end
приложение/просмотров/арбузы /show.html.erb
...
<p>This watermelon was created by <%= created_by_based_on_role(@watermelon) %></p>
...
Причина, по которой я сделал бы это вспомогательный метод, а не метод в модели watermelon.rb, заключается в том, что метод зависит от текущего_узера, который модель не может явно знать каждый раз (при условии, что вы используете Придумайте или ручную, Hartl-стиль current_user вспомогательный метод).
Edit: Per обратной связи, давайте сделаем это метод модели ...
приложение/модели/watermelons.rb
class Watermelon < ActiveRecord::Base
...
def created_by_based_on_role(viewing_user)
if viewing_user.role == "Support" || self.created_by.role == "Generic User"
self.created_by.name
else
"The Watermelons.com Support Team"
end
end
...
end
Обратите внимание, что я реализующий это как метод экземпляра, что означает, что вам нужно будет вызвать «watermelon.created_by_based_on_role (current_user)» в контроллере или представлении.
Спасибо. Но мне нужно сделать это в самой модели. Наш ui получает все данные из backend с помощью apis для отдыха и просто отображает, что он получил, не делая никаких преобразований, основанных на ролях. Бэкэнд должен только проверять роль и выполнять преобразование. – user3075906
Сообщите мне, если это работает ... –