2010-11-24 8 views
0

So habe ich eine vorhandene Datenbank, die ich versuche, über ActiveRecord zu manipulieren. Alle Spalten-, Tabellen- und Datenbanknamen sind camel-cased, d. myColumnOne, etc. Das stellt eigentlich kein Problem dar, außer dass ich, als ich versuchte, die Assoziationen zwischen den Tabellen zu definieren, Rails nicht dazu bringen konnte, meine Eingaben für die fremden Schlüsselnamen zu akzeptieren und zu belassen.Camel-Cases Foreign Key Name in Schienen

Zum Beispiel: Ich versuche, eine Verbindung zwischen einer Tabelle namens cableModems und eine Tabelle namens cmModels zu definieren, wo Kabelmodem has_one: cmModel,: foreign_key => „cmModelId“

Rails sagen zu wollen scheint dass der foreign_key tatsächlich cm_model_id ist. Auch wenn ich es so eingäbe, wie ich es oben gezeigt habe.

Meine Frage ist: Gibt es eine Möglichkeit, Rails das Gehäuse zu akzeptieren? Oder muss ich ohne die Assoziationen darüber reden?

Vielen Dank!

Antwort

0

Nach dem Durchsuchen der Ruby on Rails-API-Dokumentation zum Verfolgen des Ausführungspfades für has_one wird schnell klar, dass es keine schnelle und einfache Möglichkeit gibt, das automatische de-camelCasing zu verhindern. Mit benannten Bereichen und einer oder zwei benutzerdefinierten Methoden sollten Sie in der Lage sein, die Funktionalität von relativ einfach zu replizieren, daher würde ich vorschlagen, die Verknüpfung vorerst aufzugeben und sie möglicherweise als Ticket auf den Rails Lighthouse einzureichen.

+0

Tut mir leid, dass ich so lange gebraucht habe, um zurück zu kommen. Das ist völlig korrekt. Ich habe nur ein paar schnelle Methoden geschrieben, die den Helfer komplett umgehen, und es funktioniert jetzt. Danke für Ihre Hilfe –

0

Ist Ihre Datenbank wirklich fallabhängig? Wäre es nicht funktionieren, wenn Sie

schrieb
has_one :cm_model, :foreign_key => "cmmodelid" 

Ich würde auch Ihre Klassen machen schreiben wie folgt:

class CableModem < ActiveRecord::Base 
    set_table_name "cableModems" 
    set_primary_key "cableModemId" 
end 

, dass Hilfe in irgendeiner Weise funktioniert?