문제

Rails 응용 프로그램에서 모든 모델에 대한 named_scope를 정의하려고합니다.

현재, 나는 activerecord :: base의 이니셜 라이저를 작성하고 거기에 정기적 인 메소드를 넣음으로써 이것에 가까워 질 수있었습니다. 물론, 이것은 쿼리 체인을 만들 때 실질적인 이점을 제공하지 않으며 아마도 작업을 수행하는 데 가장 적은 철도가있는 방법 일 것입니다.

그러나 has_many, named_scope 등을 사용하려고 시도 할 때는 작동하지 않습니다.

내 이름이 맞지 않을 가능성이 높지만 NAMEND_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 클래스 본문에서 평가되기 때문에 작동하지 않을 수 있으며 예상 된 외국 키는 상속 클래스보다는 평가 된 클래스에 대한 것입니다. (예 : ID = 42 인 블로그 모델은 블로그 _id = 42에 저장된 많은 주석 모델을 가질 수 있습니다.

명명 된 범위가 올바른 경우 작동해야합니다.

상속 된 방법이 작동해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top