في محاولة لتحديد named_scopes والعلاقات أكتيفيريكورد الأخرى في جميع الموديلات
-
20-08-2019 - |
سؤال
وأنا أحاول تحديد named_scope عن كل ما عندي من النماذج في تطبيق القضبان.
في الوقت الحاضر، لقد كنت قادرا على الاقتراب من هذا عن طريق الكتابة مهيئ لأكتيفيريكورد :: قاعدة ووضع الأساليب العادية هناك. بالطبع، هذا لا يقدم أي ميزة حقيقية عندما يتعلق الأمر إلى خلق سلاسل الاستعلام وربما أقل طريقة القضبان-إرنست و يونغ للحصول على هذه المهمة.
ومع ذلك، فإنه لا يعمل عندما أبدأ في محاولة لاستخدام has_many، named_scope، الخ ... طرق أكتيفيريكورد.
وبينما أنا أفهم named_scope من المحتمل غير صحيح، أنا حقا أريد فقط مساعدة في الحصول على named_scope محددة. أيضا، أنا لست مهتما في أي الأحجار الكريمة روبي ACL في الوقت الحاضر.
في المهيآت /:
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
المحلول
وعلى has_many
من المحتمل أن لا يعمل لأنه يتم تقييم في الجسم الصف والمفاتيح الخارجية المتوقعة للفئة التي تم تقييمها بدلا من الطبقات وراثة. (مثل مدونة نموذج بالمعرف = 42 يمكن أن يكون العديد من النماذج تعليق المخزنة مع blog_id = 42، تستند مفاتيح اللازمة لجعله العمل على اسم الفئة)
ونطاق اسمه يجب أن تعمل إذا كان صحيحا.
ويجب أن تعمل هذه الطريقة الموروثة.