如何在 Active Admin 自定义批处理操作中重新加载代码?

How to reload code in Active Admin Custom Batch Actions?

我在具有自定义批处理操作的 Rails 应用中使用活动管理员。 批处理操作是根据数据库中的最后 5 条记录创建的。请在下面找到附加的代码。

但是,当创建新记录(事件)时,批处理操作不会刷新。我想知道如何强制刷新?我可以调用一个函数来使批处理操作从新记录中刷新吗?谢谢

ActiveAdmin.register TimeLineMessage do
  menu
  menu label: 'Rundown page'

  Event.order("created_at DESC").limit(5).reload.each do |event|
    batch_action ("Move to " + event.name.to_s).to_sym do |ids|
      TimeLineMessage.find(ids).each do |tlm|
        tlm.event_id = event.id
        tlm.save
      end
      redirect_to collection_path, alert: "The content tiles have been moved to "+ event.name.to_s + " event "
    end
  end

参考:http://activeadmin.info/docs/9-batch-actions.html

你想走的路是行不通的,因为代码只在Rails/ActiveAdmin启动时执行一次。

但您还有其他方法可以选择:

batch_action :attach_to_event, form: {
  event_id: -> { Event.order("created_at DESC").limit(5).pluck(:id, :name) }
} do |ids, inputs|
  event = Event.find(inputs[:event_id])
  TimeLineMessage.find(ids).each do |tlm|
    tlm.event_id = event.id
    tlm.save
  end
  redirect_to collection_path, alert: "The content tiles have been moved to "+ event.name.to_s + " event "
end

代码未经我测试,但这个想法应该可行。

对我有用的方法不是尝试强制 refresh/attach_to_event 而是在每次加载时重新计算,传递一个 lambda 作为表单的值。 详情见: