File upload with Activeadmin Rails using paperclip
Asked Answered
M

4

41

I use Active admin as my rails application backend. I want to make a file upload. How can I accomplish this functionality?

Musteline answered 16/8, 2011 at 12:20 Comment(1)
I've never used Active Admin specifically, but the Paperclip gem helps you easily upload files and attach them to any model. github.com/thoughtbot/paperclipVested
M
75

I found a way to use Paperclip with Active Admin.

I added this code in my model "Event" :

has_attached_file :map, :styles => { :medium => "238x238>", 
                                   :thumb => "100x100>"
                                 }

And i did this for my admin model :

ActiveAdmin.register Event do
 form :html => { :enctype => "multipart/form-data" } do |f|
   f.inputs "Details" do
    f.input :continent
    f.input :event_type
    f.input :name
    f.input :title
    f.input :content
    f.input :date_start, :as => :date
    f.input :date_end, :as => :date
    f.input :place
    f.input :map, :as => :file
    f.input :image, :as => :file, :hint => f.template.image_tag(f.object.image.url(:medium))
    f.input :userfull_info
    f.input :price
    f.input :phone, :as => :phone
    f.input :website, :as => :url
  end
  f.buttons
 end
end

To use it on the index page, you have to use :

column "Image" do |event|
    link_to(image_tag(event.image.url(:thumb), :height => '100'), admin_event_path(event))
  end
  default_actions
end
Musteline answered 17/8, 2011 at 7:42 Comment(4)
You can use f.input :image, :hint => "current image: #{f.template.image_tag(f.object.image.url(:thumb))}"Carrousel
Will this upload to s3 by default using paperclip?Rosenblatt
I had to use "f.actions", not "f.buttons" to get this to work.Absorbing
This seems great, but it doesn't preview the image if you just selected it and didn't upload the image yet. Is there a way to do this?Kop
A
13

Got it worked for Rails 4.1 and Paperclip 4.1:

Model

class Hotel < ActiveRecord::Base

has_attached_file :thumbnail, :styles => { :medium =>     "300x300#", :thumb => "200x200#" }
validates_attachment :thumbnail, content_type: { content_type:     ["image/jpg", "image/jpeg", "image/png"] }

end

Admin Model

ActiveAdmin.register Hotel do

permit_params :name, :description, :price, :thumbnail

form do |f|
  f.inputs "Project Details" do
    f.input :name
    f.input :thumbnail, :required => false, :as => :file
    # Will preview the image when the object is edited
  end
  f.actions
 end

show do |ad|
  attributes_table do
    row :name
    row :thumbnail do
      image_tag(ad.thumbnail.url(:thumb))
    end
    # Will display the image on show object page
  end
 end
end
Angelangela answered 2/4, 2014 at 9:22 Comment(2)
I got paperclip NoHandlerError and I had to form :html => {:multipart => true} do |f|Tuneberg
@Tuneberg you had to do form :html ... where?Impending
S
6

I'm using the rails 3.0.1 and the following code

f.input :image, :hint => "current image: #{f.template.image_tag(f.object.image.url(:thumb))}" 

return a string. After search a solution, i found it.

f.input :image, :hint => f.template.image_tag(f.object.image.url(:thumb))

Send direct the object, will return a image to the html

Storybook answered 4/12, 2011 at 0:42 Comment(1)
You can use the first line of code, just call html_safe on the string (after the double quotes).Kass
F
5

In latest Version of ActiveAdmin & Rails 6 for displaying the file field we need to use the below code

ActiveAdmin.register Project do
  permit_params :name, :uploads
  

  form multipart: true do |f|
    f.inputs "Project Details" do
      f.input :name
      f.input :uploads, as: :file, required: false
    end
    f.actions
  end

end

In some old version of AA following code also worked.

f.input :uploads, required: false

Fikes answered 21/3, 2014 at 10:16 Comment(1)
Doesn't work, you still have to add as: :file in rails 6Fifty

© 2022 - 2024 — McMap. All rights reserved.