10

Ich habe ein Post-Modell, auf das ich über ActiveAdmin zugreife. Es kann auch mithilfe des Edelsteins "acts_as_taggable_on" taggen. So kann der Administrator Tags aus einem bestimmten Post hinzufügen, bearbeiten oder löschen.Manipulieren von Tags mit acts_as_taggable_on und ActiveAdmin

Der normale Weg, um die Tagging-Funktionalität für die Ressource in Ihrem Admin-Panel hinzuzufügen, ist durch diese admin/posts.rb dabei:

ActiveAdmin.register Post do 
    form do |f| 
    f.inputs "Details", :multipart => true do 
     f.input :tag_list 
     # and the other irrelevant fields goes here 
    end 

    f.buttons 
    end 
end 

Allerdings möchte ich die Tags haben, ausgewählt aus einer Mehrfach-Auswahl Formularfeld und wird nicht manuell in ein Textfeld eingegeben (wie bei dem obigen Code). Also habe ich versucht, dies zu tun:

 f.input :tag_list, :as => :select, 
         :multiple => :true, 
         :collection => ActsAsTaggableOn::Tag.all 

aber es funktioniert nicht wie erwartet. Dadurch werden neue Tags mit einigen ganzzahligen Werten für Namen erstellt und diese dem Post zugewiesen. Jemand hat mir gesagt, dass extra Code benötigt wird, damit das funktioniert.

Irgendwelche Hinweise, wie dies gemacht wird? Hier ist mein Modell für alle Fälle: http://pastie.org/3911123

Vielen Dank im Voraus.

+0

Ich versuche das Gleiche zu tun, aber da actsastaggable on eine Zeichenfolge benötigt, die durch Kommas getrennt ist, kann ich keine starken Parameter erhalten, um das Array zu akzeptieren, das ein Dropdown-Menü mit mehreren Auswahlmöglichkeiten bietet. Wie bist du damit umgegangen? – Philip7899

Antwort

10

Statt

:collection => ActsAsTaggableOn::Tag.all 

versuchen

:collection => ActsAsTaggableOn::Tag.pluck(:name) 

Einstellen der Sammlung Tag.all wird Ihre Beiträge mit dem Tag-ID markieren, denn das ist, wie Tags standardmäßig identifiziert werden (das ist, wo die ganze Zahl Werte für Namen kommen von). map(&:name) weist den Formularersteller an, stattdessen den Namen des Tags zu verwenden.

+4

'ActsAsTaggableOn :: Tag.pluck (: name)' wäre noch besser, weil es nicht alle Tags in den Speicher lädt, bevor der Name extrahiert wird. –