2012-07-31 8 views
11

Ich weiß nicht, warum ich das nicht herausfinden kann, da es so aussieht, als sollte es so einfach sein, aber im Grunde versuche ich, einen Link zu einer Aktion zu erstellen (I "Publish" soll neben "Show", "Edit" und "Delete" für jede Ressource in Active Admin erscheinen.Active Admin Benutzerdefinierte Aktion Element Ressourcenname

ich den Code verwendet sie auf ihrem Wiki vorschlagen:

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

Problem ist, erhalte ich einen Fehler, da Schienen nicht weiß, was „post“ ist. Es ist nichts. Die Version des Wikis auf Github hat den gleichen Code, außer dass sie "Ressource" statt Post verwenden. Ich war mir nicht sicher, ob sie damit meinten, dass ich dort meinen eigenen Ressourcennamen verwenden würde, oder ob Sie eigentlich die Variable "Ressource" verwenden sollten. Ich habe den letzten Fall ausprobiert und bekam einen Fehler "Konnte nicht ohne ID finden".

Die Frage ist also, wo setze ich den Variablennamen? Was verwenden sie als Iterator?

Antwort

10

ich verwendet, um dieses zu verwenden:

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 

Dank Alter Lagos

+0

Das habe ich vor einiger Zeit gelöst und vergessen, die Frage zu beenden. Ich glaube, dass dies meine Lösung war. Habe nicht erkannt, dass der Block eine Variable erwartet. –

+1

@StephenCorwin Dies liefert ein 'ActiveAdmin :: Views :: ActionItems'-Objekt (mit active_admin 0.6), das nichts mit dem verwendeten Modell zu tun hat. Die richtige Antwort sollte sein, was @LuisOrtegaAraneda erklärt hat. –

5

ich diesen Code mit einem sehr ähnlichen Stück erreicht haben, finden Sie unter:

Inside my: 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 

In meinem Fall möchte ich den Link Tasten nur in der show Aktion zur Verfügung.

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 

Hoffe das hilft dir!

6

In ActiveAdmin Sie haben resource zu verwenden, um ein Objekt zu verweisen, die Sie mit arbeiten. Wenn Sie resource in einer Aktion wie index verwenden, erhalten Sie wahrscheinlich einen Fehler, da ActiveAdmin mit einem nicht funktioniert. Um dies zu verhindern, geben Sie die Aktionen, die Sie auf der Schaltfläche in angezeigt werden sollen

Um eine Aktion angeben, gibt das Argument only mit einer Reihe von Aktionen, die Sie auf der Schaltfläche in angezeigt werden sollen. Zum Beispiel:.

action_item :only => [:show, :edit] do 
    ... 
end