ActiveAdmin操作

27

有没有办法在ActiveAdmin模型的索引页面中指定允许的操作,例如:

index do
  actions :edit
end

index do
  actions only: :edit
end

不起作用。正确的语法是什么?

感谢您。

bundle show activeadmin
/home/muichkine/.rvm/gems/ruby-2.1.2/bundler/gems/active_admin-9cfc45330e5a
5个回答

36

通过使用actions(通常放在模型定义下面),添加您想要可用的任何操作:

ActiveAdmin.register YourModel do
actions :index, :show, :create, :edit, :update

如果您想为某个操作指定方法,可以这样做:

action_item only: :show  do
  link_to 'Edit', action: :edit # so link will only be available on show action
end

2
动作是 :create 还是 :new?如果我使用 actions :all, except: [:create],在编辑页面上仍然会有一个“新建”按钮。使用 actions :all, except: [:new] 可以让按钮消失。 - spinlock

13

示例如何使用操作列进行操作。在这个示例中,我只是重新实现了默认的列,但你可以在这里编写强大的代码:

column :actions do |item|
  links = []
  links << link_to('Show', item_path(item))
  links << link_to('Edit', edit_item_path(item))
  links << link_to('Delete', item_path(item), method: :delete, confirm: 'Are you sure?')
  links.join(' ').html_safe
end

1
这对我有用(所选答案没有)。唯一的问题是item_path应该类似于admin_itemname_path,而edit_item_path应该是edit_admin_itemname_path - Nico Brenner
这是使用.tap的完美情况。Array.new.tap do |links| { links << link_to ... }.join(' ').html_safe - danielricecodes
对于确认,应该是 data: { confirm: '你确定吗?' } - a.fahmiin

6
根据源代码,若想更改索引中的操作,应前往https://github.com/activeadmin/activeadmin/blob/master/lib/active_admin/views/index_as_table.rb#L80
actions defaults: false do |sample|
  link_to t('active_admin.edit'), admin_sample_path(sample)
end

您可以更改链接标题和动作的路径。

例如:

    actions defaults: false do |user|
      link_to t('active_admin.view'), admin_user_path(user)
    end

注意:

请记住正确添加路径,例如对于show,应该是admin_user_path(:id),对于index,应该是admin_users_path :)


5

按照以下步骤进行操作:

ActiveAdmin.register Foobar do
  actions :all, :except => [:destroy]
end

或者
ActiveAdmin.register Foobar do
  actions :only => :edit
end

需要在资源级别指定而不是方法定义中。

2
根据source code,它应该在方法定义中进行自定义,但仅添加新操作并完全禁用默认操作。 - Gabor Garami
@GaborGarami,您可以在各自的方法内进行自定义。请查看此链接:http://activeadmin.info/docs/8-custom-actions.html#custom_action_items - maximus ツ
安德烈也展示了如何进行自定义,但我猜muichkine只处理默认操作。 - maximus ツ
实际上,获胜答案是Gabor的 :) - muichkine
1
我无法让 ":only" 正常工作...但我发现 "actions :index" 可以完成任务。也就是说,它排除了 ":edit", ":view" 等。 - David Hempy

2

如果您想要多个自定义操作,而不是像Ziv Barber那样手动处理链接的连接,您也可以使用item方法,如下所示:

actions defaults: true do |user|
  item "Report", report_admin_user_path(user), method: :put
  item "Unlock", unlock_admin_user_path(user), method: :put
end

你知道是否有办法在显示“查看编辑删除报告解锁”链接的列的表头中放置一个标签吗? - undefined
1
要在“报告”和“解锁”之间添加一个空格,请根据这个答案添加class: "member_link"。https://stackoverflow.com/questions/45216947/inserting-a-space-after-appending-multiple-actions-in-activeadmin - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接