У нас есть два класса - User и GroupДинамическая делегация в Рубине
class User < ActiveRecord::Base
# Group Memberships
has_many :memberships, dependent: :destroy
has_many :groups, through: :memberships
end
class Group < ActiveRecord::Base
# Group has a property called 'name'
# Group members
has_many :memberships, dependent: :destroy
has_many :members, through: :memberships, source: :user
end
Это работает просто отлично, и мы можем создавать группы и добавлять пользователей к этим группам.
Какой самый чистый способ определить членство в группе пользователей? Что-то вроде: user.reviewer? где рецензент - это имя группы, без явного определения этих методов. Как это можно сделать с помощью делегирования?
У нас уже есть работа, хотя и уродливым способом. По достоинству оценят самое элегантное (и самое короткое) решение.
PS: Мы на Rails 4.2.7
Для такой работы я предлагаю вам взглянуть на [Пандит] (HTTPS://github.com/elabs/pundit). У них уже есть эта функциональность, и они позволяют легко расширять ее с помощью собственного кода, не беспокоясь о DSL. Это хорошо работает с Devise, и это чистая радость для работы. – mutantkeyboard