Наследование стилей Rails STI для нескольких ролей на пользователя - PullRequest
1 голос
/ 28 августа 2009

Я читал несколько примеров наследования STI для Rails, Хотя это выглядит так, как будто бы это соответствовало моим потребностям (роль / типы пользователей наследуются от базового класса пользователя). Кажется, что он не слишком хорошо справляется с пользователем, имеющим несколько ролей. Особенно потому, что он опирается на поле типа в базе данных.

Есть ли быстрый и легкий способ обойти это?

Ответы [ 3 ]

3 голосов
/ 28 августа 2009

Я не уверен, является ли STI правильным решением в пользовательской роли / пользовательском сценарии - я не думаю о пользовательских ролях / типах как особой форме пользователя. Я бы имел следующую схему:

class Membership < ActiveRecord::Base
  belongs_to :user     # foreign key - user_id
  belongs_to :role     # foreign key - role_id
end
class User < ActiveRecord::Base
  has_many :memberships
  has_many :roles, :through => :membership
end
class Role < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :membership
end

Другой способ сделать это - использовать has_and_belongs_to_many. Вы также можете проверить плагин restful_authentication .

1 голос
/ 02 августа 2013

Хорошим способом решения вашей проблемы может быть гем easy_roles. Вы можете найти его на github. Как уже говорили другие, STI - не тот способ, которым вы можете реализовать свои вещи.

0 голосов
/ 25 ноября 2010

Как сказал Энди, has_and_belongs_to_many - это еще один способ сделать это.

# user.rb
class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
end

# role.rb
class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

Примечание. Вам по-прежнему нужна таблица ассоциации в вашей базе данных, но она просто скрыта от ваших моделей.

...