【问题标题】:ActiveAdmin actionsActiveAdmin 操作
【发布时间】:2014-09-08 15:20:15
【问题描述】:

有没有办法在模型的 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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rubygems activeadmin


    【解决方案1】:

    使用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
    

    【讨论】:

    • 操作是:create 还是:new?如果我使用actions :all, except: [:create],我仍然会在编辑页面上看到一个“新建”按钮。使用actions :all, except: [:new] 会使按钮消失。
    【解决方案2】:

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

    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
    

    【讨论】:

    • 这对我有用(选择的答案没有)。唯一的问题是 item_path 应该是 admin_itemname_pathedit_item_path 应该是 edit_admin_itemname_path
    • 这是 .tap 的完美场景。 Array.new.tap do |links| { links &lt;&lt; link_to ... }.join(' ').html_safe
    【解决方案3】:

    这样做,

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

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

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

    【讨论】:

    • 基于source code,它也应该在方法定义中进行自定义,但只能添加新操作并完全禁用默认操作。
    • @GaborGarami,您可以在单个方法中自定义它。看看这个activeadmin.info/docs/8-custom-actions.html#custom_action_items
    • Andrey 还展示了如何自定义它,但我猜 muichkine 只处理默认操作。
    • 实际上获胜的答案是 Gabor 的 :)
    • 我无法 :only 工作......但我确实发现“actions :index”完成了工作。也就是说,它排除了 :edit、:view 等。
    【解决方案4】:

    根据源码,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 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      相关资源
      最近更新 更多