Ich werde massiv auf eine Angehörig-Beziehung gebunden, die in meinen Gedanken ziemlich einfach sein sollte.Gehört zu Foreign Key
Wenn ich eine Datenbankzuordnung bei einer Migration von einem Ticket zu einem Konto erstelle, erstellt sie ein Datenbankfeld namens 'account_id' in der Tabelle 'Tickets', was in Ordnung ist. Da ist in meinem Ticket Modell Ich habe:
belongs_to :created_by, class_name: 'Account'
Aber wie Schienen 5, belongs_to Beziehungen automatisch eine Validierung der Anwesenheit Voraussetzung für account_id hinzufügen. Aber wenn ich created_by übergebe, schlägt die Validierung fehl. Ich möchte die Anwesenheit von created_by nicht account_id überprüfen. So füge ich das optional: true Tag
belongs_to :created_by, class_name: 'Account', optional: true
dann Anwesenheit von separat
validates_presence_of :created_by
das alles funktioniert erstellt bestätigen, aber ich mag es nicht, dass ich mich im Widerspruch durch optional sagen und dann validieren eine Zeile später für was ist eigentlich das gleiche Feld!
Ich habe dann zu denken, was ist, wenn das Feld in der Datenbank auf der Ticket-Tabelle tatsächlich created_by heißt und mit einigen primären und fremden Schlüssel Sachen ich die Beziehung bauen, sollte es richtig beheben?
Aber ich bin mir nicht sicher, wie man die Migration aufbauen und dann wie auf der Erde, um das gehört zu schreiben. Ich hatte versucht:
add_column :tickets, :created_by, :bigint
add_index :tickets, :created_by
und
belongs_to :created_by, class_name: 'Account', foreign_key: :created_by, primary_key: :account_id
aber komplett ausfällt, aber wenn ich
belongs_to :account, foreign_key: :created_by
das mir ermöglicht created_by zu aktualisieren mit einem account_id von 1 sagen, aber wenn Ich rufe ticket.created_by
Ich bekomme die Int und ticket.account
gibt das Konto zurück. Ich möchte, dass es andersherum ist.
Je mehr ich dies zu betrachten, ich denke, es ist ein Fehler in der Art und Weise, wie rails seine validates_presence_of für die assignes_to erzeugt. Es verwendet die Tabellenspalte für die Beziehung, die ich definiere. – rmaspero