모든 모델에서 이름이 지정된 _scopes 및 기타 ActiveRecord 관계를 정의하려고합니다.
-
20-08-2019 - |
문제
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에 저장된 많은 주석 모델을 가질 수 있습니다.
명명 된 범위가 올바른 경우 작동해야합니다.
상속 된 방법이 작동해야합니다.
제휴하지 않습니다 StackOverflow