ActiveAdmin 跳过 action_item 与 next 与 proc

ActiveAdmin skipping action_item with next versus proc

在 ActiveAdmin 中有两种跳过项目的方法gem

  action_item :user_reviewed, only: %i[show] do
    next unless resource.individual?
    ....
  end

对比记录的一个:

  action_item :user_reviewed, only: %i[show], if: proc{ resource.individual? } do
    ....
  end

proc 和 next 都将跳过创建 action_item 并转到下一个,但从技术的角度来看(不是文档这么说),哪个性能更好,更重要的是 -为什么? 在我的理解中,next 更快,因为它只是跳到下一个元素,与 proc 相比,这意味着调用一个函数。

使用 proc,您可以延迟执行以渲染时间。如果显示 action_item 的条件取决于请求周期中的数据(获取参数、会话 cookie、登录 admin_user,或者可能是索引页面中的活动范围),您可以使用过程。

这会导致服务器启动时出错:

action_item :user_reviewed, only: %i[show], if: params[:scope] == 'somescopename'

Activeadmin 在服务器启动时注册资源,并且不存在请求周期数据。需要时您可以使用:

action_item :user_reviewed, only: %i[show], if: proc {params[:scope] == 'somescopename' }. 

这对收集过滤器也很有帮助。有时它们需要在渲染时填充数据,而不是在 rails 服务器启动时。检查 https://activeadmin.info/3-index-pages.html 并搜索 proc.