Попытка определить named_scopes и другие отношения ActiveRecord для всех моделей

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

Вопрос

Я пытаюсь определить named_scope для всех моих моделей в приложении Rails.

В настоящее время я смог приблизиться к этому, написав инициализатор для ActiveRecord::Base и вставив туда обычные методы.Конечно, это не дает никакого реального преимущества, когда дело доходит до создания цепочек запросов, и, вероятно, является наименее похожим на rails способом выполнения работы.

Однако это не работает, когда я начинаю пытаться использовать has_many, named_scope и т.д...Методы ActiveRecord.

Хотя я понимаю, что мой named_scope, скорее всего, неверен, мне действительно нужна только помощь в определении named_scope.Кроме того, в настоящее время меня не интересуют никакие драгоценные камни Ruby 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 скорее всего, не сработает, потому что он вычисляется в теле класса, а ожидаемые внешние ключи относятся к классу, в котором он был вычислен, а не к наследующим классам.(например,Модель блога с id = 42 может содержать множество моделей комментариев, хранящихся с blog_id = 42, ключи, необходимые для ее работы, основаны на имени класса)

Именованная область должна работать, если она правильная.

Унаследованный метод должен работать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top