11

所以我有一个非常有效的批处理操作。但是现在我希望通过单击右侧的按钮(例如查看/编辑/销毁)来使用相同的操作。但我似乎无法正确处理。

# app/admin/subscriptions.rb
ActiveAdmin.register Subscription do
...
  batch_action :approve_selected do |subscriptions|
    subscriptions.each do |subscription|
      Subscription.find(subscription).approve
    end
    redirect_to :back
  end

  member_action :approve do
    Subscription.find(params[:id]).approve
    redirect_to :back
  end

  action_item :only => :show do
    link_to('Approve', approve_admin_subscription_path(subscription))
  end
...
end

使用此代码查看、编辑或删除旁边不会显示任何按钮。我认为这是因为我正在使用:only => show,所以我将其取下或使用only :index,但两者都出现以下错误(而且我找不到太多关于它的信息):

undefined local variable or method `subscription' for #<ActiveAdmin::Views::ActionItems:0x007fb3a95b25c0>

如果我将操作项行更改为action_item :only => index do |subscription|then ,则会出现以下错误并且puts subscription只给出一些 html (不知道为什么):

undefined method `each_byte' for nil:NilClass
4

4 回答 4

40

这可以通过以下方式完成:

ActiveAdmin.register Post do
  index do
    column :name
    actions defaults: true do |post|
      link_to 'Archive', archive_admin_post_path(post)
    end
  end
end

请注意,使用defaults: true会将您的自定义操作附加到活动的管理员默认操作。

于 2013-10-22T14:01:12.737 回答
6

对于登陆页面的朋友,为了追加1个以上的链接

做类似的事情:

    actions default: true do |model|
        [
            link_to('Option 1', "#"),
            '  ',
            link_to('Option 2', "#")
        ].reduce(:+).html_safe
    end
于 2016-06-01T06:05:02.063 回答
3

在这里找到了答案。您可以使用下面的代码和问题中的代码来做到这一点(删除操作项块)

index do
...
  actions do |subscription|
    link_to('Approve', approve_admin_subscription_path(subscription))
  end
...
end

但我认为有一种方法可以通过将一个动作附加到默认动作来做到这一点(所以如果你知道如何做到这一点,那么添加另一个答案!)

此外,要删除默认值,您可以像这里一样更改它:

actions :defaults => false do |subscription|
于 2013-09-16T20:44:47.543 回答
0

index do写下

actions dropdown: true do |category|
  item 'Archive', archive_admin_post_path(post)
end
于 2020-09-11T15:18:50.053 回答