Active Storage not resizing images - ruby-on-rails-5

I am using active storage on rails 5.2.4 with the gems:
# Use ActiveStorage variant
gem 'rmagick', '~> 2.15', '>= 2.15.4'
gem 'mini_magick', '~> 4.8'
gem 'image_processing', '~> 0.2.3'
and trying with
<%= image_tag photo.image.variant(resize: "1000x1000").processed.service_url, class: 'img-responsive-full' %>
<%= image_tag photo.image.variant(resize: "1000x1000>").processed.service_url, class: 'img-responsive-full' %>
<%= image_tag photo.image.variant(resize: "1000>x1000>").processed.service_url, class: 'img-responsive-full' %>
none of these methods is resizing the images or forcing the 1000x1000 dimensions I want, how could I force the images to be that size? (I have just migrated from paperclip to active storage)

Adding a ! got it working:
<%= image_tag photo.image.variant(resize: "1000x1000!"), class: 'img-responsive-full' %>
Although I can not find an explanation on why was not resizing without it. By reading the documentation seems like it should work without any addition.

Related

Error using nested_form gem with empty association

In my rails app, I have two models, a ClientPage and a ContentSection, where ClientPage has_many :content_sections. I'm using the nested_form gem to both models to be edited with the same form. This works fine as long as the ClientPage has at least one ContentSection, but if there are no associated ClientSections, the using nested_form's link_to_add method throws the following NoMethodError:
undefined method `values_at' for nil:NilClass
The form is structured as follows:
<%= nested_form_for page, form_options do |f| %>
# ClientPage fields
# ClientSections
<%= f.link_to_add "Add new section", :content_sections %>
<% end %>
As long as there is at least one ClientSection associated with the page, this works fine. As soon as there isn't, the error is thrown. Removing the link_to_add also stops the error from being thrown. (There's actually a second nested model under ContentSection, and the same issue arises if there are no associated models.)
Not sure what I'm fairly obvious thing I'm missing, but any pointers or suggestions would be greatly appreciated.
Finally worked this out -- the error was due to the fact that I was using the gem in a slightly non-standard way. Within the form, instead of rendering all of the content sections the standard way:
<%= f.fields_for :content_sections do |section_form| %>
# section fields
<% end %>
I put it inside a loop, as I needed the index of each item (which is not stored within the model itself):
<% page.content_sections.each_with_index do |section, index| %>
<%= f.fields_for :content_sections, section do |section_form| %>
# section fields
<% end %>
<% end %>
The issue doing it this way is that the fields_for method does not get called if the association is empty, and as such the gem cannot build the blueprint for the object (which is used to add in the extra item when link_to_add is called).
The solution was to make sure fields_for got called even if the association was empty:
<% if page.content_sections.empty? %>
<%= f.fields_for :content_sections do |section_form| %>
# section fields
<% end %>
<% end %>

Ruby on Rails - image_tag links not working in posts

trying to make link to my recent uploaded image
<%= link_to (image_tag (post.image_url(:thumb))), post.image.url(:original), :class => 'postimage' %>
how ever it's not working, at all...
<% #post.image do |image| %>
<%= link_to (image_tag (post.image_url(:thumb))), post.image.url(:original), :class => 'postimage' %>
<% end %>
the fun part is that
<%= #post.image %>
works. but only shows /uploads/post/image/3/eKoh3.jpg
full code here https://gist.github.com/4332533
This line looks wrong to me:
<% #post.image do |image| %>
(btw your gist actually says #post.image.each do |image|, which I'm assuming is what you meant to do above)
If you are mounting an uploader on your Post model's :image attribute, then this makes no sense. A mounted uploader allows you to upload one image, and you can't iterate over it using each.
I'm not sure what you're trying to do. Are you trying to iterate over all the versions? Try post.image.versions.each
Are you trying to upload multiple images? Carrierwave can't help you with that directly. You'll need to create a new model, Image, and mount your uploader there. Your Post will need a line like
has_many :images
And your Image model will need to belong_to :post. You'll also need to figure out how to upload and manage images in that new table.

Image file uploader plugin for Rails 3.2 that can store to Database

I'm looking for Rails plugin that can store image file to database.
I've just try "paperclip" and "carrierwave".
They are good plugin.
But they normaly can store to local file system or Amazon S3, fog.
I want to store image file to database.
Please tell me which gem can accomplish it.
thank you.
Here is an example how to you can store an image in binary field (raw_file)
form:
<%= form_for #user do |f| %>
<%= f.file_field :avatar %>
<% end %>
controller:
def create
#user = User.new(params[:user])
# store uploaded avatar as blob
#user.raw_file = params[:user][:avatar].read
#user.save
end
Use RMagick or mini_magick to convert image from blob.

Using Devise, I don't see notices like "you've signed in" when i log into my app

I'm building a basic app with Rails 3.2 and Devise 2.0. I've create a User devise model and a Projects model. In my routes.rb files I have
root :to => 'projects#index'
I can sign up and sign in at Get users/sign_up and Get users/sign_in, respectively, but when it redirects to projects#index, I don't see a notice at the top that says "You've signed in successfully. Which file do I need to check to fix this?
You need to add flash messages showing to the file /projects/index.html.erb
for example this way:
<% flash.each do |key, value| %>
<%= content_tag(:div, value, :class => "flash #{key}") %>
<% end %>

Rails 3 - routes for admin section

I am building my first admin section in Rails and I am struggling with routing problems.
My routes.rb looks like this:
get "admin/menuh"
get 'admin/welcome'
namespace :admin do
resources :users
resources :menuh
resources :menuv
resources :welcome
end
And my views structure looks like views/admin/users/files. If I will set to url address of browser the url localhost:3000/admin/users/new, so I will get the error message No route matches {:controller=>"users"} (it's in the file views/admin/users/_form.html.erb - this file is generated by scaffold)... so I would like to ask you - where is the problem? Is here anything important, what I am disregarding?
You've set up your form_for like this, I reckon:
<%= form_for #user do |f| %>
Because the route is in a namespace, you need to tell the form that also:
<%= form_for [:admin, #user] do |f| %>
That should help you fix that issue.