Как сделать динамический метод в модели ActiveRecord?

У меня есть ассоциативный массив записей c таблицей Company

[
#<CompaniesRole:0x00005625a9fe0220 id: 1, company_id: 1, role: "product", permission: "create">, 
#<CompaniesRole:0x00005625a9fcfce0 id: 2, company_id: 1, role: "order", permission: "update">
]

Надо сделать в модели CompaniesRole, что бы я смог вызвать в следующем формате:

 company.companies_roles.order 
 => #<CompaniesRole:0x00005625a9fcfce0 id: 2, company_id: 10, role: "order", permission: "can_update"

и мне вернуло только одну запись где у роли есть поле с role = 'order'. Вариант с исользованием where и find напрямую, к примеру company.companies_roles.where(role: 'order')не подходит.

Возможно ли использовать define_method для решения этой задачи и какой будет вид?


Ответы (1 шт):

Автор решения: Jurgen Meier

Спасибо, что ответили. Я нашел ответ на свой вопрос. Поле ролей у меня представленно как enum, я использовал gem enumerize и добавил к энуму scope: :shallow. Получилось именно то что я хотел - Когда вызываешь значение енума напрямую на классе.

→ Ссылка