我正在尝试为Rails应用程序中的所有模型定义一个named_scope。
目前,我已经能够通过为ActiveRecord :: Base编写初始化程序并在其中放置常规方法来接近这一点。 当然,这在创建查询链时没有提供任何真正的优势,并且可能是完成工作的最少轨道方式。
但是,当我开始尝试使用has_many,named_scope等... ActiveRecord方法时,它不起作用。
虽然我理解我的named_scope可能不正确,但我真的只想帮助定义named_scope。另外,我目前对任何Ruby ACL GEM都不感兴趣。
在初始化者/:
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
答案 0 :(得分:1)
has_many
可能不起作用,因为它在类体中被计算,而预期的外键是用于评估它的类而不是继承类。 (例如,id = 42的博客模型可以使用blog_id = 42存储许多评论模型,使其工作所需的密钥基于类名称)
如果指定范围是正确的,则该范围应该有效。
继承的方法应该有用。