Я хочу send_data
для администратора, который использует интерфейс activeadmin на нашем сайте. Эти данные представляют собой ZIP-файл и могут быть загружены при соблюдении определенных условий для выбранных элементов.
Я создал сервис, который обрабатывает логику (довольно сложную). Так что из activeadmin я могу позвонить:
batch_action :action_name, form: {selection: ['...']} do |ids, inputs|
response = MyService.new(ids, inputs[:selection]).my_method
redirect_to collection_path
end
В моем распоряжении MyService.rb
:
...
def my_method
...
if condition
zip_data = Zip::OutputStream.write_buffer do |zip|
zip.put_next_entry("#{original_file_name}.xml")
zip << File.read(original_file)
end
send_data(zip_data.read, :type => 'application/zip', :filename => "#{original_file_name}.zip")
# here send_data throws an error because it's a controller method
else
...
end
...
end
...
Но как правильно использовать метод send_data
? Может быть, я должен что-то реструктурировать? Я знаю, что вы, вероятно, можете сделать ActionController::DataStreaming.send_data(...)
вне контроллера, но это не рекомендуется для кода.