2012-07-31 13 views
11

Nie wiem, dlaczego nie mogę tego zrozumieć, ponieważ wydaje się, że powinno być tak proste, ale w zasadzie próbuję utworzyć link do działania (I chcesz "Opublikuj", aby pojawiał się obok opcji pokaż, edytuj, usuń) dla każdego zasobu w Aktywnym administratorze.Aktywna administracja Niestandardowa akcja Nazwa zasobu Nazwa

użyłem kodu sugerują ich encyklopedii:

action_item do 
    link_to "button label", action_path(post) 
end 

Problem polega na tym, że pojawia się błąd, ponieważ szyny nie wie, co „post” jest. Jest zero. Wersja Wiki na Githubie ma ten sam kod, z tą różnicą, że używa postów zamiast "resource". Nie byłem pewien, czy to właśnie oni sugerowali, że użyłbym tam mojej nazwy zasobu, czy też powinniśmy używać zmiennej "zasób". Wypróbowałem tę drugą sprawę i otrzymałem błąd "Nie można znaleźć bez ID".

Pytanie brzmi, gdzie mam ustawić nazwę zmiennej? Co oni używają jako swojego iteratora?

Odpowiedz

10

Ja używałem tego:

action_item only: :show do |resource| 
    link_to('New Post', new_resource_path(resource)) 
end 

UPDATE

action_item only: :show do 
    link_to('New Post', new_resource_path) 
end 

Dzięki Alter Lagos

+0

Rozwiązałem to chwilę temu i zapomniałem zamknąć pytanie. Sądzę, że to było moje rozwiązanie. Nie zdawałem sobie sprawy, że blok oczekiwał zmiennej –

+1

@StephenCorwin Zwraca obiekt "ActiveAdmin :: Views :: ActionItems' (z active_admin 0.6), który nie ma nic wspólnego z używanym modelem. Poprawną odpowiedzią powinno być to, co wyjaśnił @LuisOrtegaAraneda. –

5

I dokonał tego z bardzo podobny kawałek kodu, patrz:

moim Wewnątrz: app/admin/posts.rb

member_action :publish, method: 'get' do 
    post = Post.find(params[:id]) 
    post.publish! 
    redirect_to admin_post_path(post), notice: 'Post published!' 
end 

W moim przypadku, chcę przyciski Link dostępny tylko w działaniu show.

action_item :only => :show do 
    if post.status == 'pending' 
    link_to 'Publish', publish_admin_post_path(post) 
    elsif post.status == 'published' 
    link_to 'Expire', expire_admin_post_path(post) 
    else 
    end 
end 

Mam nadzieję, że to pomoże!

6

W ActiveAdmin trzeba użyć resource odwoływać się obiekt, który pracujesz.

Podczas korzystania z resource w akcji takiej jak index prawdopodobnie wystąpi błąd, ponieważ ActiveAdmin nie współpracuje z jednym. Aby temu zapobiec, należy określić czynności, które mają przycisk, aby pojawić się w

aby określić działania, dać argument only z szerokim wachlarzem działań, które mają przycisk, aby pojawić się na przykład:..

action_item :only => [:show, :edit] do 
    ... 
end 
Powiązane problemy