Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Updating paperclip avatar in multipart simple_form

I would like to create an edit page for the below form. The problem is that when the user browses to the edit page the brand_name and name are pre-filled, but the image upload field shows 'no file chosen' even when an avatar exists for the 'style'. Please let me know if there is some way to remedy this. Thanks!

My Edit Form:

<%= simple_form_for @style, :html => { :class => 'form-horizontal' }, :remote => true do |m| %>

    <%= m.input :brand_name, :label => 'Brand', :placeholder => 'Brand' %>    
    <%= m.input :name, :label => 'Style', :placeholder => 'Style' %>
    <%= m.input :avatar, :label => "Image" %>

    <div class="form-actions" style = "background:none">
      <%= m.submit nil, :class => 'btn btn-primary' %>
      <%= link_to 'Cancel', styles_path, :class => 'btn' %>
    </div>

<% end %>
like image 643
Abram Avatar asked Apr 22 '12 07:04

Abram


2 Answers

Just implemented this yesterday. Make a custom input in /app/inputs

class AvatarInput < SimpleForm::Inputs::FileInput
def input
out = '' # the output string we're going to build
# check if there's an uploaded file (eg: edit mode or form not saved)
if object.send("#{attribute_name}?")
  # append preview image to output
  # <%= image_tag @user.avatar.url(:thumb), :class => 'thumbnail', id: 'avatar' %>
  out << template.image_tag(object.send(attribute_name).url(:thumb), :class => 'thumbnail', id: 'avatar')
  end
# append file input. it will work accordingly with your simple_form wrappers
    (out << @builder.file_field(attribute_name, input_html_options)).html_safe
  end
end

Then you can do

<%= f.input :avatar, :as => :avatar %>
like image 133
DVG Avatar answered Oct 17 '22 08:10

DVG


This is all I needed for this to work (in haml):

=simple_form_for @user, :html => {:multipart => true } do |f|
  =f.file_field :image
like image 39
Eskim0 Avatar answered Oct 17 '22 08:10

Eskim0