2013-03-07 18 views
5

für meine App habe ich mehrere Tabellen für Benutzer (franceusers, belgiumusers, ...) und ich würde gerne den einen oder anderen abhängig von Domäne Ich versuchte es mit table_name_prefix und table_name aber es scheint nichtbenutzerdefinierter Tabellenname für Tabelle Benutzer mit Gerät

class User < ActiveRecord::Base 
rolify 
# Include default devise modules. Others available are: 
# :token_authenticatable, :confirmable, 
# :lockable, :timeoutable and :omniauthable 
devise :database_authenticatable, :registerable, #:confirmable, 
:recoverable, :rememberable, :trackable, :validatable 

def self.table_name 
debugger 
'franceusers' 
end 

def self.table_name_prefix 
debugger 
'france' 
end 
end 

dank Debugger zu arbeiten, kann ich sehen, dass heißt aber nicht self.table_name_prefix. Und selbst wenn self.table_name wenn genannt, Suche Benutzer in Tabellen Benutzer entwickeln statt franceusers

in Konsole User.table_name => "franceusers"

User.table_name_prefix => "france"

mehr komisch, ich benutze auch activeadmin, und wenn ich Benutzerliste durchsuche, habe ich einen Fehler: Mysql2 :: Fehler: Unbekannte Spalte 'faceusers.id' in 'Auftragsklausel': SELECT Benutzer. * FROM Benutzer ORDER BY franceusers.id desc LIMIT 30 OFFSET 0

es scheint, dass es table_prefix für Feld b finden kann nicht für FROM.

mache ich etwas schlechtes? Gibt es eine andere Möglichkeit, den Tabellennamen des Benutzers zu ändern? Ich kann nicht alle Benutzer Tabellen in einer beitreten, da es eine Richtlinie meines Chefs ist: es

dank

Antwort

0

Wenn Sie verschiedene Arten von Benutzern haben, und Sie haben eine Anforderung von oben, dass sie jeweils in unterschiedlich sein müssen Datenbanken, dann würde ich wahrscheinlich nur eine Benutzerklasse für jeden erstellen (vorausgesetzt, wir reden 5-10 und nicht 100s).

Haben Sie einen FranceUser und einen SpainUser etc. Dann extrahieren Sie die gemeinsame Logik in ein Modul, das Sie in jede Klasse aufnehmen können. Sie müssen auch die login/register/etc-Controller überschreiben, damit sie die verschiedenen Tabellen zusammenfügen und nach dem richtigen Benutzer suchen können. Sie müssen auch E-Mail-Eindeutigkeitseinschränkungen über mehrere Datenbanktabellen implementieren. Im Grunde hört sich das nach einer wirklich schlechten Idee an und du wirst eine Menge Arbeit verrichten müssen, die du ansonsten kostenlos mit deiner Arbeit bekommst.

Es ist machbar, aber ich würde vorschlagen, dass Sie herausfinden, welchen Anwendungsfall Ihr Chef hass, um Ihre Daten in mehrere Tabellen aufzuspalten und dann einen besseren Weg zu finden, sein Problem zu lösen. Es könnte einfach so einfach sein wie einfaches Berichten und es gibt viel einfachere und elegantere Wege, diese Probleme zu lösen, als die Hälfte der Funktionalität zu benutzen und dann zu überschreiben.

Viel Glück :)

Verwandte Themen