Активный администратор Пользовательское действие Название ресурса компонента

Не знаю, почему я не могу понять это, потому что кажется, что это должно быть так просто, но в основном я пытаюсь создать ссылку на действие (я хочу, чтобы "Опубликовать" появлялось следующее для отображения, редактирования, удаления) для каждого ресурса в Active Admin.

Я использовал код, который они предлагают в своей вики:

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

Проблема в том, что я получаю сообщение об ошибке, потому что рельсы не знают, что такое "пост". Это ноль. Версия Wiki на Github имеет тот же код, за исключением того, что вместо "post" они используют "ресурс". Я не был уверен, что это было связано с тем, что я буду использовать свое собственное имя ресурса или если вы действительно используете переменную "ресурс". Я попробовал последний случай и получил ошибку "Не удалось найти без идентификатора".

Итак, вопрос в том, где я могу установить имя переменной? Что они используют в качестве своего итератора?

Ответ 1

Я использовал это:

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

ОБНОВЛЕНИЕ

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

Спасибо Alter Lagos

Ответ 2

В ActiveAdmin вы должны использовать resource для ссылки на объект, с которым работаете.

Когда вы используете resource в действии типа index, вы, вероятно, получите сообщение об ошибке, поскольку ActiveAdmin не работает с ним. Чтобы предотвратить это, укажите действия, по которым должна появиться кнопка.

Чтобы указать действие, укажите аргумент only с массивом действий, в которые вы хотите включить кнопку. Например:

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

Ответ 3

Я сделал это с очень похожим кодом, см.

Внутри моего: 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

В моем случае я хочу, чтобы кнопки ссылок были доступны только в действии 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

Надеюсь, это поможет вам!