2012-07-31 22 views
11

Non so perché non riesco a capire questo perché sembra che dovrebbe essere così semplice, ma in sostanza, sto cercando di creare un collegamento a un'azione (I vuoi "Pubblica" per visualizzare accanto a mostrare, modificare, eliminare) per ciascuna risorsa in Active Admin.Active Admin Azione personalizzata Elemento Nome risorsa

ho usato il codice suggeriscono sul loro wiki:

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

Il problema è che, ottengo un errore perché le rotaie non sa cosa "post" è. È nulla. La versione del Wiki su Github ha lo stesso codice, eccetto che usano "risorsa" invece di post. Non ero sicuro se questo implicasse che avrei usato il mio nome di risorsa lì, o se dovresti effettivamente usare la variabile "risorsa". Ho provato quest'ultimo caso e ho ottenuto un errore "Impossibile trovare senza ID".

Quindi la domanda è: dove devo impostare il nome della variabile? Cosa stanno usando come loro iteratore?

risposta

10

Ho usato per usare questo:

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 

Grazie Alter Lagos

+0

Risolto qualche tempo fa e ho dimenticato di chiudere la domanda. Credo che questo sia finito per essere la mia soluzione. Non si è reso conto che il blocco prevedeva una variabile –

+1

@StephenCorwin Ciò restituisce un oggetto 'ActiveAdmin :: Views :: ActionItems' (con active_admin 0.6), che non ha nulla a che fare con il modello utilizzato. La risposta corretta dovrebbe essere ciò che è spiegato da @LuisOrtegaAraneda. –

5

ho compiuto questo con un pezzo molto simile codice, vedi:

mia Interno: 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 

Nel mio caso, voglio che i pulsanti di collegamento disponibile solo nell'azione 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 

Spero che questo ti aiuti!

6

In ActiveAdmin è necessario utilizzare resource fare riferimento a un oggetto che si sta lavorando.

Quando si utilizza resource in un'azione come index, si otterrà probabilmente un errore poiché ActiveAdmin non funziona con uno. Per evitare questo, specificare le azioni che si desidera il pulsante per apparire in

Per specificare un'azione, dare l'argomento only con una serie di azioni che si desidera che il pulsante appare in. Ad esempio:.

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