rails: Can't resolve image into URL when using ActiveStorage in mountable Engine
Steps to reproduce
- Create a new 5.2 app and setup ActiveStorage using a simple form as described in this blogpost
- Create a new mountable engine and move the
PostsControllerand views into the engine’s namespace. - Add the newly created engine to your app’s Gemfile and mount the engine
Expected behavior
url_for should still work with ActiveStorage models.
Actual behavior
ArgumentError when using url_for or image_tag after form submission.
Can't resolve image into URL: undefined method to_model’ for #<ActiveStorage::Variant`
Edit:
It seems that if I don’t use isolate_namespace it works as expected. Are we not supposed to use ActiveStorage in isolated namespaces?
If I manually create the correct route based on ActiveStorage’s routes I can create the correct path through main_app:
variant = image.file.variant(resize: '100x100')
signed_blob_id = variant.blob.signed_id
variation_key = variant.variation.key
filename = variant.blob.filename
image_tag main_app.rails_blob_variation_path(signed_blob_id, variation_key, filename)
System configuration
Rails version: 5.2.0.beta2
Ruby version: 2.4.2
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 4
- Comments: 15 (2 by maintainers)
Commits related to this issue
- Added bypass to fix polymorphic mappings (details: https://github.com/rails/rails/issues/31325#issuecomment-560135329). — committed to bichinger/alchemy_cms by bichinger-stm 4 years ago
Have you tried
main_app.url_for(variant)?Spina::ImagesHelperworks fine on Rails 5.2 RC1. but returnundefined method 'rails_blob_variation_path'on 5.2 RC2.I try to this code, it works on my engine.
so I’ve found someone advising that the
image_taghas changed in v5.2+ Unlike v5.1 where you could pass an uploader-object and rails would guess, now in v5.2+ you can only pass the URL.We’ve included a helper in Spina CMS to circumvent this problem for now. Is this something that will be picked up after the 5.2 release?
Apparently the name of the route changed to
rails_blob_representation_path. Changing it in thevariantmethod fixes it.I added a method to our
Spina::Imagemodel so you can pass a PagePart directly to image_tag like this:@pixeltrix https://github.com/Bramjetten/active_storage_test
It’s a simple new Rails 5.2 app with a Post model with
has_one_attached. I placed the controller, views and routes inside a new engine (in theenginesfolder).Bumping into this now with Rails 6.1.4 and a mountable engine with ActionText.