2017-02-07 8 views
1

Ich habe eine Beziehung zwischen Kompositionen und Sprachen. Eine Komposition sollte in einer einzigen Sprache geschrieben werden.rails_admin: geänderte Beziehung, Formular nicht korrekt

Meine schema.rb enthält die folgenden Zeilen:

... 
create_table "compositions", force: :cascade do |t| 
    ... 
    t.integer "product_language_id", null: false 
end 

... 
add_foreign_key "compositions", "languages", column: "product_language_id" 
... 

Ich erkannte, dass die Beziehung falsch geschrieben wurde, also habe ich die Modelle so sein:

  • zuvor gab es eine belongs_to :language Linie in composition.rb die ich geändert habe has_one :language
  • vorher gab es eine has_many :compositions Linie in language.rb die ich geändert belongs_to :composition

Edit: ERSTE FRAGE: ist das Verfahren, ich richtig gemacht? Ich bin immer noch Anfänger bei Ruby on Rails.

Jetzt, in rails_admin, gibt es keine Möglichkeit, die Sprache unter dem Formular für die Zusammensetzung zu wählen, gibt es die Zeile aber keine Liste, Box noch irgendetwas, nur den Namen der Marke 'Sprache', obwohl ich einen Eintrag dafür habe in seiner Tabelle.

Edit 2: Nachdem ich die Beziehung wieder auf ihren ursprünglichen Status zurückgesetzt habe, was ich für falsch hielt, gibt es in rails_admin die Möglichkeit, Kompositionen aus dem Sprachformular hinzuzufügen, aber ich hätte auch gerne ein Drop-Down-Menü die Kompositionsform zur Auswahl der Sprache, die nicht erscheint. Irgendein Vorschlag?

Können Sie mir sagen, wo ich versage? Vielen Dank im Voraus

Antwort

0

Dank this upwork freelancer ich es, die Beziehung in seinem ursprünglichen belongs_to/has_many Status mit dem Fremdschlüssel zusätzlich in composition.rb verlassen korrigiert:

belongs_to :language, :foreign_key => 'product_language_id' 

Rails davon ausgeht, alles nach Konvention erfolgen. Daher wird erwartet, dass der Fremdschlüssel einer Tabelle tablename_id lautet. Wenn wir von der Konvention abweichen, müssen wir in unserem Modell zusätzliche Optionen hinzufügen, um Rails mitzuteilen, dass der Fremdschlüssel nicht das ist, was er erwartet, sondern etwas anderes. Wir könnten es auch so schreiben:

belongs_to :product_language, class_name: 'Language' 
Verwandte Themen