Ответ 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
Не знаю, почему я не могу понять это, потому что кажется, что это должно быть так просто, но в основном я пытаюсь создать ссылку на действие (я хочу, чтобы "Опубликовать" появлялось следующее для отображения, редактирования, удаления) для каждого ресурса в Active Admin.
Я использовал код, который они предлагают в своей вики:
action_item do
link_to "button label", action_path(post)
end
Проблема в том, что я получаю сообщение об ошибке, потому что рельсы не знают, что такое "пост". Это ноль. Версия Wiki на Github имеет тот же код, за исключением того, что вместо "post" они используют "ресурс". Я не был уверен, что это было связано с тем, что я буду использовать свое собственное имя ресурса или если вы действительно используете переменную "ресурс". Я попробовал последний случай и получил ошибку "Не удалось найти без идентификатора".
Итак, вопрос в том, где я могу установить имя переменной? Что они используют в качестве своего итератора?
Я использовал это:
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
В ActiveAdmin вы должны использовать resource
для ссылки на объект, с которым работаете.
Когда вы используете resource
в действии типа index
, вы, вероятно, получите сообщение об ошибке, поскольку ActiveAdmin не работает с ним. Чтобы предотвратить это, укажите действия, по которым должна появиться кнопка.
Чтобы указать действие, укажите аргумент only
с массивом действий, в которые вы хотите включить кнопку. Например:
action_item :only => [:show, :edit] do
...
end
Я сделал это с очень похожим кодом, см.
Внутри моего: 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
Надеюсь, это поможет вам!