Frage

Ich habe ein Problem mit der Suche nach Datensätzen in meiner STI -Tabelle aufgrund meiner Erbschaftsstruktur

class User < ActiveRecord::Base

class LegacyUser < User

class AuthUser < User

class SuperUser < AuthUser

class FieldUser < AuthUser

class ClientAdmin < AuthUser

Das Problem ist, dass Find nicht für das Authusermodell funktioniert. Die Abfrage sucht nach dem Typ "Authuser" und enthält nicht die anderen drei Möglichkeiten.

Bearbeiten: Während des Spiels damit begann es zu funktionieren, aber nur für ClientAdmin und Fielduser, so dass diese Funktionalität eingebaut werden sollte. Aber jetzt ist es wieder zum ursprünglichen Problem zurückgekehrt

War es hilfreich?

Lösung

Ich bin gerade auf das gleiche Problem gestoßen und habe eine Lösung gefunden hier.

Kurz gesagt, das Problem ist, dass Ihre mittlere abstrakte Klasse keine Möglichkeit gibt, zu wissen, welche Unterklassen vor ihrer Belastung sind. Um dies zu umgehen, können Sie alle Unterklassen am Ende der Datei der Klassen manuell laden.

Also am Ende von Auth_user.rb:

require_dependency 'super_user'
require_dependency 'field_user'
require_dependency 'client_user'

Andere Tipps

Wird das Authusermodell selbst verwendet?

Wenn es sich nur um eine Klasse für gemeinsame Methoden zwischen den ererbten Klassen handelt, können Sie versuchen, sie als abstrakte Klasse festzulegen. Auf diese Weise könnte Activerecord direkt durch die Seite gehen.

In der Deklaration des Authusers fügen Sie einfach hinzu self.abstract_class = true so was:

class AuthUser < User
     self.abstract_class = true
end

Ich weiß nicht, ob das in diesem Szenario funktioniert, aber es könnte einen Versuch wert sein.

Aufgrund der Art und Weise, wie STI in Rails funktioniert (es speichert den Modellnamen in einer Datenbankspalte namens "Typ"), sehe ich nicht, wie die Hierarchie, die Sie oben beschreiben, unterstützen kann - ich denke, Sie sind auf eine einzelne Hierarchie beschränkt.

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