尝试在所有模型上定义named_scopes和其他ActiveRecord关系

时间:2009-06-25 18:03:49

标签: ruby-on-rails inheritance activerecord models named-scope

我正在尝试为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

1 个答案:

答案 0 :(得分:1)

has_many可能不起作用,因为它在类体中被计算,而预期的外键是用于评估它的类而不是继承类。 (例如,id = 42的博客模型可以使用blog_id = 42存储许多评论模型,使其工作所需的密钥基于类名称)

如果指定范围是正确的,则该范围应该有效。

继承的方法应该有用。