Standardmäßig verwendet Rails den foreign_key auf der Seite angites_to, um eine SQL-Verknüpfung zwischen den beiden zugeordneten Tabellen auszuführen. Es wird also nicht in das JSON-Feld nach den foreign_key-Werten gesucht.
Sie könnten eine Association Extension erstellen, um in Ihr JSON-Feld zu schauen. Sie können hier in den Schienen Verbandsführer, wie man das tun: http://guides.rubyonrails.org/association_basics.html#association-extensions
Meiner Meinung nach ist dies gegen Schienen Konventionen, und Sie sollten das nicht tun. Stattdessen könnten Sie in der Personentabelle eine neue Spalte namens city_id anlegen. Dann führen Sie einen Job aus, der die Personentabelle wiederholt, um die city_id aus dem json zu extrahieren und die Spalte city_id zu aktualisieren. Danach können Sie eine normale 1 zu viele Verknüpfung zwischen der Tabelle Personen und Städte machen. Wenn ich wo du bin würde ich auch andere Felder extrahieren die ich vielleicht brauche. Dann können Sie in der Datenbank Indizes für die Geschwindigkeit hinzufügen.
Update:
In Rails 4.2 und Postgres können Sie json Inhalte direkt in eine Säule gegeben und dann können Sie es leicht abfragen, um die Postgres json Abfragesyntax in Schienen verwenden.
Also ich denke, Sie könnten diese Association Extension erstellen, die in den JSON-Inhalt aussehen könnte, obwohl ich das nicht empfehlen würde, weil es gegen Konventionen ist.
Referenzen:
Beispiel json Abfragen whith Schienen-Modellen: http://robertbeene.com/rails-4-2-and-postgresql-9-4/
Active Record json Datentyp: http://edgeguides.rubyonrails.org/active_record_postgresql.html#json
Postgres json Abfragesyntax: http://www.postgresql.org/docs/9.4/static/functions-json.html
Sie können keinen Fremdschlüssel in ein JSON-Feld erstellen, aber das heißt nicht, dass Rails das Modellieren einer Assoziation auf Anwendungsebene nicht unterstützt; Ich werde es für eine Rails-Person verlassen, um zu antworten. –