Frage

Ich versuche, einen named_scope für all meine Modelle in einer Rails-Anwendung zu definieren.

Zur Zeit ich habe in der Lage nahe an diesem zu erhalten, indem sie einen Initialisierer für Activerecord :: Base Schreiben und regelmäßige Methoden in dort setzen. Natürlich ist dies bietet keinen wirklichen Vorteil, wenn es Abfrage Ketten zu erstellen und ist wahrscheinlich der am wenigsten Schienen-ey Weg kommt erledigt der Job zu bekommen.

Allerdings funktioniert es nicht, wenn ich die has_many zu versuchen und zu nutzen beginnen, named_scope, etc ... Active Methoden.

Während ich mein named_scope verstehen nicht korrekt wahrscheinlich ist, ich mag wirklich nur helfen, den named_scope definiert bekommen. Auch ich bin nicht an irgendwelchen Ruby-ACL GEMs gegenwärtig.

In initializers /:

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
War es hilfreich?

Lösung

die has_many funktionieren wahrscheinlich nicht, weil es in der Klasse Körper und die erwarteten Fremdschlüssel sind für die Klasse ausgewertet wird, in dem es eher als die Vererbungsklassen bewertet. (Zum Beispiel Blog-Modell mit id = 42 kann viele Kommentare Modelle mit blog_id gespeichert haben = 42, die Schlüssel, die Arbeit machen werden benötigt, um sie basieren auf dem Klassennamen)

Der benannte Geltungsbereich sollte funktionieren, wenn es korrekt ist.

Die geerbte Methode sollte funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top