10

Mam model Post, do którego uzyskuję dostęp za pośrednictwem ActiveAdmin. Jest również taggable za pomocą gem gem_as_taggable_on. Administrator może dodawać, edytować i usuwać znaczniki z określonego posta.Manipulowanie znacznikami act_as_taggable_on i ActiveAdmin

normalny sposób dodać funkcjonalność znakowania dla zasobu w panelu administracyjnym jest robienie tego w admin/posts.rb:

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 

Jednakże chcę mieć znaczniki wybranych spośród wielu select pole formularza i nie jest wprowadzane ręcznie w polu tekstowym (tak jak w przypadku kodu powyżej). Więc próbowałem to zrobić:

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

ale nie działa zgodnie z oczekiwaniami. To faktycznie tworzy nowe tagi z pewnymi liczbami całkowitymi dla nazw i przypisuje je do tego posta. Ktoś mi powiedział, że potrzebny jest dodatkowy kod, żeby to zadziałało.

Jakieś wskazówki, jak to zrobić? Oto mój model na wszelki wypadek: http://pastie.org/3911123

Z góry dziękuję.

+0

Próbuję zrobić to samo, ale ponieważ aktywastabilne na wymaga ciągów rozdzielonych przecinkami, nie mogę uzyskać silnych parametrów, aby zaakceptować tablicę, którą daje lista wyboru wielokrotnego wyboru. Jak sobie z tym poradziłeś? – Philip7899

Odpowiedz

10

Zamiast

:collection => ActsAsTaggableOn::Tag.all 

spróbować

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

Ustawianie kolekcji do Tag.all będzie oznaczyć posty z ID zawieszki, ponieważ to jak znaczniki są identyfikowane domyślnie (to gdzie całkowita wartości dla nazw pochodzą). map(&:name) mówi konstruktorowi formularzy, aby zamiast tego używał nazwy znacznika.

+4

'ActsAsTaggableOn :: Tag.pluck (: name)' byłoby jeszcze lepsze, ponieważ nie będzie ładować wszystkich tagów do pamięci przed wyodrębnieniem nazwy. –