История данного вопроса достаточно объёмна. Поэтому, начало вот тут:
Rails 5.2 API-mode. Как избавиться от ActiveSuppor...
Чем занимается
InvalidSignature
я таки выяснил. Отправляется таким как я, если метод
verify
из
MessageVerifier
считает, что обрабатываемое сообщение не было подписано правильно либо не было закодировано в Base64. И не надо меня спрашивать, что всё это значит. Я выяснил также и причины появления этого InvalidSignature: он появляется тогда, когда я отправляю
null
или даже пустую строку вместо файла. Ради эксперимента закомментировал в коде лишние аттачи:
class Testimonial < ApplicationRecord
# has_one_attached :userpic
has_one_attached :object_photo_1
# has_one_attached :object_photo_2
# has_one_attached :object_photo_3
validates :name, presence: true
validates :video, presence: true, if: Proc.new { |t| t.text.blank? }
validates :text, presence: true, if: Proc.new { |t| t.video.blank? }
end
И теперь при отправке файла получаю такое вот сообщение:
Started POST "/admin/v1/testimonials" for ::1 at 2019-07-05 21:03:46 +0300
Processing by Admin::TestimonialsController#create as JSON
Parameters: {"name"=>"sdfasdf", "patronymic"=>"", "surname"=>"", "userpic"=>"", "company"=>"", "object_photo_1"=>#<ActionDispatch::Http::UploadedFile:0x00007f22f450f3c0 @tempfile=#<Tempfile:/tmp/RackMultipart20190705-10176-bw9ytk.jpg>, @original_filename="filename.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"object_photo_1\"; filename=\"filename.jpg\"\r\nContent-Type: image/jpeg\r\n">, "object_photo_2"=>"null", "object_photo_3"=>"null", "video"=>"", "text"=>"sadfasdf"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]]
↳ /home/yart/.rvm/gems/ruby-2.5.1/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
JwtBlacklist Exists (0.7ms) SELECT 1 AS one FROM "jwt_blacklists" WHERE "jwt_blacklists"."jti" = $1 LIMIT $2 [["jti", "4b4d7516-32ce-4ec9-a654-d271be40bba0"], ["LIMIT", 1]]
↳ /home/yart/.rvm/gems/ruby-2.5.1/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
Unpermitted parameter: :format
Completed 500 Internal Server Error in 6ms (ActiveRecord: 1.8ms)
ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: relation "active_storage_blobs" does not exist
LINE 8: WHERE a.attrelid = '"active_storage_blobs"'::...
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
c.collname, col_description(a.attrelid, a.attnum) AS comment
FROM pg_attribute a
LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
LEFT JOIN pg_type t ON a.atttypid = t.oid
LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
WHERE a.attrelid = '"active_storage_blobs"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
):
app/controllers/admin/testimonials_controller.rb:23:in `create'
И теперь тип ошибки как бы намекает, что у меня что-то не то в БД. Там даже английским по чёрному (ну, когда в терминале) написано, что неопределенная таблица, а ActiveRecord презрительно добавляет, что мол состояние-то у вас инвалидное, куда ж вы ломитесь?! Но я решительно не знаю, чем мне может помочь данная информация. Несколько раз перечитал вот это вот руководство:
Attaching Files to Records, но либо я совсем не понимаю буржуйский, либо одно из двух, но я в упор не вижу разницы между моим кодом и тем, что приведён там. Или есть разница? Ну не просят они делать дополнительные миграции под аттачмент файлов! Ну вот нигде об этом не написано ни прямо ни косвенно! Ну откуда там эта ошибка в БД?!?! Ну подскажите кто-нибудь уже!!! Проект стоит, заказчик смотрит косо.
UPDATE
В общем, эту тему я пофиксил благодаря уважаемым комментаторам там, внизу. Но вопрос не закрылся полностью. Переношу его в другую тему, потому что название этой не соответствует сути нового развития событий.