2012-07-31 16 views
11

No sé por qué no puedo entender esto, ya que parece que debería ser tan simple, pero básicamente, estoy tratando de crear un enlace a una acción (I quiere que aparezca "Publicar" al lado de mostrar, editar, eliminar) para cada recurso de Active Admin.Elemento de acción personalizado de administración activa Nombre del recurso

He utilizado el código que sugieren en su wiki:

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

El problema es que me da un error porque los carriles no sabe lo que es "post". Es nulo. La versión de Wiki en Github tiene el mismo código, excepto que usan "recurso" en lugar de publicar. No estaba seguro de si eso implicaba que usaría mi propio nombre de recurso allí, o si se supone que debes usar la variable "recurso". Intenté el último caso y obtuve el error "No se pudo encontrar sin identificación".

Entonces, la pregunta es, ¿dónde puedo establecer el nombre de la variable? ¿Qué están usando como su iterador?

Respuesta

10

Solía ​​usar esto:

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

ACTUALIZACIÓN

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

Gracias Alter Lagos

+0

Resuelto esto hace un tiempo y se olvidó de cerrar la pregunta. Creo que esto terminó siendo mi solución. No me di cuenta de que el bloque esperaba una variable –

+1

@StephenCorwin Esto es devolver un objeto 'ActiveAdmin :: Views :: ActionItems' (con active_admin 0.6), que no tiene nada que ver con el modelo usado. La respuesta correcta debería ser qué ha explicado @LuisOrtegaAraneda. –

5

que he logrado esto con una pieza muy similar de código, ver:

Dentro de mi: 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 

En mi caso, quiero que los botones de enlace disponible sólo en la acción 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 

Espero que te ayude!

6

En ActiveAdmin usted tiene que utilizar resource para hacer referencia a un objeto que se está trabajando.

Cuando utiliza resource en una acción como index, probablemente obtendrá un error ya que ActiveAdmin no está trabajando con uno. Para evitar esto, especificar las acciones que desea que aparezca el botón de

Para especificar una acción, dar el argumento only con una serie de las acciones que desea que aparezca el botón de Por ejemplo:..

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