2012-10-01 13 views

risposta

0

È possibile creare un before_filter nel controller che si applica solo all'azione di modifica. Potrebbe controllare lo stato e consentire l'esecuzione o redirect_to a seconda del ritorno del metodo.

Qualcosa di simile nel controller applicazioni:

def some_method 
    if foo.bar == true 
    redirect_to foos_path 
    end 
end 

Poi all'inizio del controller della domanda

before_filter :some_method, :only => :edit 
+0

Questo è un passaggio ma voglio nascondere anche il link da modificare (nel tuo esempio). –

+0

Ho cambiato lo spettacolo da modificare. Fondamentalmente, questo verrà reindirizzato quando qualcosa raggiunge il percorso di modifica a meno che la condizione non soddisfi le aspettative. Penso che questo sia quello che stai cercando di fare. In caso contrario, fornire ulteriori dettagli in modo da poter rispondere meglio. – jameswilliamiii

-1

se u vuole nascondere il link "modifica" (nelle viste active_admin) per oggetto se l'oggetto contiene un valore specifico, è possibile sovrascrivere la vista predefinita per il metodo e aggiungere la condizione prima che venga visualizzato il collegamento.

6

Se si sta parlando di nascondere il link di modifica che viene mostrato di default (insieme con la vista ed eliminare collegamenti) nell'azione index, è possibile personalizzare la vista indice come segue:

ActiveAdmin.register Model do 

    index do 

    column :actions do |object| 

     raw(%(#{link_to "View", [:admin, object]} 
     #{link_to "Delete", [:admin, object], method: :delete} 
     #{(link_to"Edit", [:edit, :admin, object]) if object.status? })) 

    end 
    end 
end 

Perché il il contenuto della colonna sarà solo quello che viene restituito dal blocco column, è necessario restituire tutti i tre (o due) collegamenti contemporaneamente come stringa. Qui viene utilizzato raw in modo che vengano visualizzati i collegamenti effettivi e non l'html per i collegamenti.

+0

Grazie per la tua risposta! Sarà fantastico, se è possibile aggiungere prompt per eliminare. –

7

Finalmente l'ho fatto. Avevo bisogno di due cose:

Reindirizzare quando si accede direttamente e nascondere i pulsanti alla pagina di modifica.

Per reindirizzare quando l'utente tenta di accedere direttamente alla pagina di modifica Io uso un before_filter:

before_filter :some_method, :only => [:edit, :update] 
def some_method 
    redirect_to action: :show if status == something 
end 

Per nascondere i pulsanti lo faccio in questo modo:

ActiveAdmin.register Model do 
    config.clear_action_items! 
    action_item :only => [:show] , :if => proc { instance.status == something } do 
     link_to 'Edit', edit_model_path(instance) 
    end 
end 
+1

'instance' dovrebbe essere' model' (nome del modello in snake_case). – ypresto

1

Questo può essere realizzare utilizzando il seguente:

ActiveAdmin.register Object do 
    index do 
    column :name 
    actions defaults: true do |object| 
     link_to 'Archive', archive_admin_post_path(post) if object.status? 
    end 
    end 
end 

noti che usare defaults: true aggiungerà il tuo cus azione tom per azioni predefinite di amministrazione attiva.

Problemi correlati