Я реализовал действие, которое загружает файл с js на S3 и устанавливает значение поля формы с помощью javascript, затем я использую этот URL в действии администратора rails.
Я все это вставляю, потому что в прошлом это помогло бы мне в этих случаях, сравнив мой подход с подходом к работе.
Вот соответствующие (упрощенные) файлы:
# app/views/rails_admin/main/update_orders_and_line_items.html.haml
= form_tag(method: :post) do
= hidden_field_tag 'uploaded-file-url', '', id: 'uploaded-file-url'
= submit_tag 'Submit', class: 'action-button-pink'
# app/assets/javascripts/google_cloud_storage_field.js
let url = get_url(fileInput);
let valueField = $('#uploaded-file-url');
valueField.val(url);
# lib/rails_admin/config/actions/update_orders_and_line_items.rb
module RailsAdmin
module Config
module Actions
class UpdateOrdersAndLineItems < RailsAdmin::Config::Actions::Base
# Might cause random bugs if enabled
register_instance_option :pjax? do
false
end
register_instance_option :http_methods do
[:post, :get]
end
register_instance_option :controller do
proc do
if request.post?
url = params['uploaded-file-url']
do_stuff_with(url)
elsif request.get?
# [...]
end
end
end
end
end
end
end
Я полагаю, что источником вашей ошибки является тег %form
, метод формы по умолчанию - GET, и поэтому ваш браузер пытается перенаправить вас на какую-то страницу, если вы используете, как я сделал form_tag(method: :post)
, и делаете убедитесь, что электронные письма находятся в значении hidden_field_tag, вы получите свой список на action.rb