1

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
4

1 に答える 1

1

has_manyクラス本体で評価され、予想される外部キーは継承クラスではなく評価されたクラス用であるため、これは機能しない可能性があります。(例: id=42 のブログ モデルは、blog_id = 42 で保存された多くのコメント モデルを持つことができます。それを機能させるために必要なキーは、クラス名に基づいています)

名前付きスコープは、正しい場合に機能するはずです。

継承されたメソッドが機能するはずです。

于 2009-06-25T18:31:17.720 に答える