/ / Wie kann man einen Hibernate wie eine has_many Verbindung in Rubin auf Schienen erstellen? - Rubin-auf-Schienen, Winterschlaf, Grals, Aktivaufnahme, hat viele

Wie erstellt man Hibernate wie has_many association in ruby ​​on rails? - Ruby-on-Rails, Winterschlaf, Grails, Activrecord, Has-Many

Ich entwickle eine Ruby-on-Rail-Anwendung, die ich brauche, um die vorhandene Datenbank zu nutzen, die von grails application entwickelt wurde. In dieser Anwendung verwenden sie die Spring-Security-Bibliothek oauth2.

Ich habe erfahren, dass die Spring Library Hibernate ORM und meine Rails-Anwendung ActiveRecord ORM verwenden. Has_many ist im hibernate wie folgt:

class OAuthClient {

private static final String NO_CLIENT_SECRET = ""

transient springSecurityService

String clientId
String clientSecret

Integer accessTokenValiditySeconds
Integer refreshTokenValiditySeconds

Map<String, Object> additionalInformation

static hasMany = [
authorities: String,
authorizedGrantTypes: String,
resourceIds: String,
scopes: String,
redirectUris: String
]

}

Im obigen Beispiel erstellt die has_many-Deklaration assoziierte Tabellen ohne Domänenmodelle.

In Schienen müssen wir jedoch beide Modelle erstellen:

class A < ActiveRecord::Base
has_many :bs,
end

class B< ActiveRecord::Base
belongs_to :a
end

Gibt es eine Lösung, um die has_many-Verbindung im Ruhezustand (ohne Modell) in Rails zu implementieren?

Hinweis: Ich verwende das "B" -Modell nicht für eine einzelne Operation.

Danke im Voraus.

Antworten:

0 für die Antwort № 1

Kurz gesagt - nein. So funktionieren Rails und ActiveRecord einfach nicht. In ActiveRecord gibt es Modelle, die jeweils einer Datenbanktabelle entsprechen.

In ActiveRecord gibt es Beziehungen zwischen Modellen -So weiß AR, wie man beitritt und was mit den Daten zu tun ist, die aus der Datenbank abgerufen werden. Beziehungen in AR sind im Gegensatz zu Hibernate nicht nur ein Array, sondern Bereiche, die faul geladen werden und AR benötigt das verbundene Modell, um die Beziehung zu reflektieren.

a = thing.accessories # a lazy loading scope
a = a.where(color: "Blue") # adds a condition to the scope
a.to_a # fetches from the DB.

Modelle sind im Allgemeinen der wichtigste Teil des Rails-Geschmacks von MVC, daher sehe ich keine besonderen Vorteile darin, sie zu umgehen.

Wenn Sie eine Reihe von Zusatzgeräten auf einem speichern möchtenDaten aufzeichnen Mehrere RDBMS-Systeme haben Datentypen wie ARRAY, HSTORE und JSON. Diese werden jedoch für AR als eine einzige Spalte behandelt und nicht als A-Spalte has_many Beziehung.

In diesem Fall können Sie jedoch das Erbe verwendenDatenbank - aber das bedeutet nicht, dass Ihre objektrelationale Zuordnung mit Hibernate übereinstimmen muss. Es bedeutet nur, dass Sie viel mehr Konfiguration vornehmen müssen, um ActiveRecord mitzuteilen, wie Sie die Zuordnung zu Schema, Fremdschlüsseln usw. modellieren.

Wenn Sie jedoch nicht Schienen benötigen, um die Datenbank mit der älteren App gemeinsam zu nutzen, ist es normalerweise vernünftiger, die Datenbank zu migrieren, sodass sie den Schienen-Konventionen folgt.

Wenn Ihre Anwendungen nur die Authentifizierung gemeinsam nutzen, ist es möglicherweise sinnvoller, einen OAuth-Authentifizierungsanbieter einzurichten, den beide Apps verwenden.