Я пытаюсь определить named_scope для всех моих моделей в приложении Rails.
В настоящее время я смог приблизиться к этому, написав инициализатор для ActiveRecord :: Base и добавив туда обычные методы.
Конечно, это не дает реального преимущества, когда речь идет о создании цепочек запросов, и, вероятно, является наименее надежным способом выполнения работы.
Однако это не работает, когда я начинаю пытаться использовать методы has_many, named_scope и т. Д. ... ActiveRecord.
Хотя я понимаю, что мой named_scope, скорее всего, неверен, мне действительно нужна только помощь в определении named_scope. Кроме того, я не заинтересован в каких-либо Ruby ACL GEMs.
В инициализаторах /:
class ActiveRecord::Base
has_many(:permissions)
named_scope(:acl_check, lambda do |user_id, method|
{
:include => :permission,
:conditions => [
["permissions.user_id=?", user_id],
["permissions.method=?", method],
["permissions.classname=?", self.class.name]
]
}
end)
# Conducts a permission check for the current instance.
def check_acl?(user_id, method)
# Perform the permission check by User.
permission_check = Permission.find_by_user_id_and_instance_id_and_classname_and_method(user_id, self.id, self.class.name, method)
if(permission_check)
# If the row exists, we generate a hit.
return(true)
end
# Perform the permission check by Role.
# Otherwise, the permissions check was a miss.
return(false)
end
end