Как я могу получить доступ к "ролям" в "представлениях" в моем приложении Rails? - PullRequest
1 голос
/ 22 сентября 2010

В приложении Rails 3, которое я создаю, чтобы помочь мне изучить Ruby на (и) Rails, меня немного смущают таблицы "role / role_users / users".

У меня есть Devise и CanCan, и я хочу "получить доступ" к этим ролям.

Сейчас у меня три роли:

админ
Персонал
клиент

В базе данных у меня есть эти таблицы (и несколько других):

ролей (таблица)
id => 1 || name => admin
id => 2 || имя => персонал
id => 3 || имя => клиент

roles_users (таблица)
role_id => 1 || user_id => 1
role_id => 2 || user_id => 2
role_id => 3 || user_id => 3

пользователи (таблица)
user1
user2
user3

Итак, сейчас у меня три пользователя. Пользователь № 1 - «администратор», Пользователь № 2 - «персонал», а Пользователь № 3 - «клиент».

В "views / admin / users / show.html.erb" я хотел бы отобразить "роль" каждого пользователя, а затем позволить администратору изменить ее. Как только я смогу отобразить роль, я думаю, что смогу настроить ее так, чтобы администратор мог ее изменить.

Дело в том ... Я немного запутался в том, какую переменную / имя я могу использовать, чтобы показать роль каждого пользователя. Я могу легко получить доступ к таким вещам, как user.first_name или user.address, но я не уверен, как я могу получить доступ к чему-то вроде user.role (что не работает).

Есть предложения?

Ура!

Sam

Ответы [ 4 ]

1 голос
/ 22 сентября 2010

Соглашение CanCan заключается в создании метода role?.Я знаю, что у вас есть только одна роль на пользователя, но это сработает для вас, если вы решили позже иметь несколько ролей на пользователя:

def role?(role)
  !!self.roles.find_by_name(role.to_s)
end

!! - это способ привести что-либо в логическое значение.

Таким образом, вы можете проверить авторизацию с помощью:

if user.role? :editor
  can :manage, Foo
end

Чтение: если пользователь имеет роль editor, тогда он может управлять моделью Foo.

1 голос
/ 22 сентября 2010

Я думаю, вы можете сделать @user.roles.Дело в том, что каждый пользователь имеет только одну роль (хотя это отношение hmabtm), так что вы можете создать в своей модели пользователя:

def role
  roles.first
end

def role=(role_id)
  self.roles = [Role.find(role_id)]
end
0 голосов
/ 22 сентября 2010

попробовать: @ User.roles.first.name

0 голосов
/ 22 сентября 2010
@user.roles # returns a collection of roles for the given user
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...