Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Active Admin Custom Action Item Resource Name

Don't know why I can't seem to figure this out since it seems like it should be so simple, but basically, I'm trying to create a link to an action (I want "Publish" to appear next to show, edit, delete) for each of a resource in Active Admin.

I used the code they suggest on their wiki:

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

Problem is, I get an error because rails doesn't know what "post" is. It's nil. The version of the Wiki on Github has the same code, except they use "resource" instead of post. I wasn't sure if that was them implying that I would use my own resource name there, or if you're supposed to actually use the variable "resource". I tried the latter case and got a "Couldn't find without an ID" error.

So the question is, where do I set the variable name? What are they using as their iterator?

like image 898
Stephen Corwin Avatar asked Jul 31 '12 19:07

Stephen Corwin


3 Answers

I used to use this:

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

Thanks Alter Lagos

like image 106
bonyiii Avatar answered Oct 21 '22 12:10

bonyiii


I have accomplished this with a very similar piece of code, see:

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 my case, I want the link buttons available only in the show action.

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

Hope this helps you!

like image 41
Kleber S. Avatar answered Oct 21 '22 13:10

Kleber S.


In ActiveAdmin you have to use resource to reference an object that you're working with.

When you use resource in an action like index, you will probably get an error as ActiveAdmin is not working with one. To prevent this, specify the actions you want the button to appear in.

To specify an action, give the argument only with an array of the actions you want the button to appear in. For example:

action_item :only => [:show, :edit] do
  ...
end
like image 6
Luis Ortega Araneda Avatar answered Oct 21 '22 12:10

Luis Ortega Araneda