2016-04-16 11 views
0

Ausgabe BenutzersprachenSchienen 4 mehrere der automatischen Vervollständigung mit verschachtelten Attributen

Modelle Benutzer

 has_many :fluent_languages, foreign_key: 'user_id' 
     accepts_nested_attributes_for :fluent_languages, 
            allow_destroy: true, 
            reject_if: proc { |attributes|  attributes['user_id'].blank? || attributes['language_id'].blank? } 

FluentLanguage

belongs_to :user 
    belongs_to :language 

Sprache

wählen
has_many :fluent_languages, foreign_key: 'language_id' 

Ich wünsche wählen wie folgt aussehen https://select2.github.io/examples.html#multiple

Mein Versuch:

<%= f.fields_for :fluent_languages do |fluent_language| %> 
           <%= fluent_language.text_field :user_id, :type => 'hidden' %> 
           <%= fluent_language.autocomplete_field :language_id, autocomplete_language_language_users_path, 'data-delimiter' => ',', :multiple => true, :placeholder => 'Choose languages' %> 
           <% end %> 

Es Rekord ist neben params:

"7"=>{"user_id"=>"15", "language_id"=>["English,"]}} 

aber korrekte Daten sehen wie folgt aus:

"4"=>{"user_id"=>"15", "language_id"=>["1995"], "id"=>"1"} 

Ein weiteres Problem in meinem Code - Multiselect mit Autocomplete-Render für jeden Datensatz in FluentLanguage. Und noch eine - Standarddaten sind Sprachen ids von FluentLanguage statt Sprachtitel aus der Sprachtabelle.

Welchen Entwurf für dieses Problem empfehlen Sie?

Antwort

0

Sie haben mehrere Fragen gestellt, ich werde die wichtigste bezüglich des Designs beantworten. Sobald Sie ein gutes Datenmodell implementiert haben, werden die Lösungen für das Erzielen des gewünschten Formulars einfacher.

Es scheint, dass Sie eine has_many_through-Beziehung zwischen Benutzer und Sprache mit FluentLanguage als durchgehende Tabelle haben, die definiert werden muss.

Sie müssen Migrationen ausführen, um Ihr Schema zu aktualisieren. Die rails guide ist eine gute Quelle dafür, wie eine has_many_through-Beziehung funktioniert und wie sie aufgebaut wird. Die api docs sind auch sehr nützlich.

+0

Es hat geholfen, danke! – user3624882

+0

Bitte markieren Sie meine Antwort als akzeptiert, wenn ich versuche, mein nächstes Abzeichen zu bekommen. Wenn Sie Fragen zum Formular haben, lassen Sie es mich wissen. Vielen Dank. – margo

+0

Wie markieren Sie es akzeptiert? – user3624882