Спасибо за чтение!Удобный способ реализации пользовательских ролей в моем приложении
В настоящее время я работаю над новым приложением, и ищу лучший способ для реализации следующей функции
По сценарию мне нужно реализовать «как пользователь а есть роль в расположении»
ЧТО I СОБЫТИЕ:
Сценарий: Когда пользователь добавляет новое местоположение в профиль , одно из требуемых полей - «роль». Это могут быть «гость», «менеджер» или «продавец». Каков наилучший способ выполнить его в модели?
Я совершил это с has_many_through Ассоциация
CONTROLLER:
def create
@location = Location.new(location_params)
@location.profiles << current_user.profile
#set user role
current_user.profile.profile_location_throughs.where(location_id: location.id).set_role(params[:location][:role])
respond_to do |format|
if @location.save
....
end
end
end
МОДЕЛИ:
class Profile < ActiveRecord::Base do
has_many :profile_location_throughs
has_many :locations, through: :profile_location_throughs
end
class Location < ActiveRecord::Base do
has_many :profile_location_throughs
has_many :locations, through: :profile_location_throughs
end
class ProfileLocationThrough < ActiveRecord::Base
# with boolean fields: manager, seller, guest
belongs_to :location
belongs_to :profile
def set_role(role)
case role
when "guest"
self.guest = true
when "seller"
self.seller = true
when "manager"
self.manager = true
end
end
end
=====
ВОПРОС: Не могли бы вы предложить более красивой путь реализовать его функцию?
Может пользователь иметь разные роли в разных местах? Если да, правильно управлять ею через ассоциации. Но вместо того, чтобы просто сохранить имя роли в каждой записи через таблицу. Создайте таблицу «ролей» и соответствующую модель «Роль» и добавьте в нее связь через таблицу. –
Я вижу, у вас есть 3 разных поля, по одному для каждой роли. Смотрите, это может быть плохо, потому что вам придется добавлять новое поле в модель всякий раз, когда определяется новая роль. Вместо этого вы должны сохранить отдельную поле 'role' и сохранить« гость »,« менеджер »или« продавец ». –
Да. В одном месте это может быть «продавцом», другим «гостем» и т. Д. – Art