У меня есть сайт Rails 3, над которым я работаю, есть пользователи, которые работают с «документами».
Если бы у каждого документа был user_id, то для метода редактирования в моем контроллере документов я мог бы ограничить результаты документами, принадлежащими текущему пользователю, что-то вроде:
@doc = current_user.documents.find(params[:id])
respond_with(@doc)
К сожалению, не все так просто. Каждый пользователь может иметь отношения с документом посредством промежуточной «подписки» - он может быть владельцем, редактором или читателем.
Итак, теперь в моем методе редактирования я хочу иметь возможность ограничить извлеченный документ теми, кто является владельцем или редактором. Как мне это сделать? В настоящее время у меня есть область в моей модели документа, как:
scope :editable_by, lambda { |user| joins(:subscriptions).where("user_id = ? AND (subscriptions.role = ? OR subscriptions.role = ?)", user.id, Subscription::ROLES['owner'], Subscription::ROLES['editor']) }
чтобы я мог перейти к своему методу редактирования:
@doc = Document.editable_by(current_user).find(params[:id])
Есть ли лучший способ?