Ich musste die Rails-Konvention brechen, um eine geschäftliche Notwendigkeit zu erfüllen, und das bereitet mir einige Schmerzen. Meine Absicht ist es, in der Lage sein, eine fremde Tabelle (durch Rails) durch zwei separate Methoden zu verweisen.
Ein typisches Szenario sieht etwa so aus:
class Employee < ActiveRecord::Base
belongs_to :company
end
class Company < ActiveRecord::Base
has_many :employees
end
Sie könnten dann über ein Employee-Objekt auf ein Unternehmen verweisen, indem Sie etwas wie das Folgende tun:
e = Employee.find(1)
puts e.company.name
Das funktioniert für die meisten Tabellen gut, aber sagen wir, wir haben eine Tabelle wie die folgende:
id - integer default_channel_id - integer and foreign key reference to channel table selected_channel_id - integer and foreign key reference to channel table
Wie dargestellt, ist es nicht möglich, einfach die Konvention bestimmen zu lassen, wie die Verbindung hergestellt wird, weil mehr als eine Spalte auf denselben Fremdschlüsselwert verweist.
Ich habe die Lektüre der Rails-Dokumentation über Assoziationen aber ich habe nichts gefunden, was es mir erlaubt, Assoziationen auf diese Weise zu definieren. Am nächsten kam ich mit der Option :foreign_key, aber das allein hat nicht funktioniert, weil es eine einzige Methode mit dem Namen channel erzeugt hat. Hier ist mein Versuch:
class Foo < ActiveRecord::Base
belongs_to :channel, :foreign_key => "default_channel_id"
belongs_to :channel, :foreign_key => "selected_channel_id"
end
Wie sollte ich dabei vorgehen?
Nota: Nur für den Fall, dass es hilft, ich bin mit Ruby 1.9.2 und Rails 3.0.3 arbeiten.