في محاولة لتحديد named_scopes والعلاقات أكتيفيريكورد الأخرى في جميع الموديلات

StackOverflow https://stackoverflow.com/questions/1045363

سؤال

وأنا أحاول تحديد 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، تستند مفاتيح اللازمة لجعله العمل على اسم الفئة)

ونطاق اسمه يجب أن تعمل إذا كان صحيحا.

ويجب أن تعمل هذه الطريقة الموروثة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top