Today I want to tell you how to do global preprocessing of uploaded files in ActiveStorage. Unfortunately ActiveStorage design doesn’t provide this feature out of the box, or I haven’t found any information about it. But sometimes you may need to process attachments for all models in a project.
To achieve this goal, we need to override several methods of singleton class of ActiveStorage::Blob class, in my version (rails 6.1) they are build_after_upload, build_after_unfurling and upload....
Sometimes we need to get an extension by content mime type. There are many ways to manage this but in Rails (or rack-based app) you can use this trick:
Rack::Mime::MIME_TYPES.invert['image/jpeg'] # => '.jpg'
A few weeks ago I faced with a requirement to optimize a huge JSON response from Rails-based API.
For example, we want to respond large set of data as JSON collection. In our controller, we have some action for that, but rails Live API couldn’t stream JSON or XML directly. But we can use a little trick.
class PostsController def index @data = Post.order(:created_at) # Or other scope or service object....