Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rails carrierwave edit/update form

In my rails project I use Carrierwave to upload images to S3 via fog. So far I have the Create Read and Delete portions of the CRUD spectrum working.

My problem is the edit/update portion. Im use the same _form.html.erb to edit that I used for creating records. When I click the edit link the form loads all of my data into the form fields for editing with the exception of the image. The form field is blank as though there is no image associated with the record.

How do I update an image that is already saved to S3?

Models/listing.rb

class Listing < ActiveRecord::Base
  attr_accessible :body, :price, :title, :image

  mount_uploader :image, ListingUploader
end

Controllers/listings_controller.rb (edit/update portion)

def edit
    @listing = Listing.find(params[:id])
end

def update
    @listing = Listing.find(params[:id])
    if @listing.update_attributes(params [:listing])
        redirect_to :action => 'show', :id => @listing
    else
        render :action => 'edit'
    end
end

_form.html.erb

<%= form_for @listing, :html => { :multipart => true } do |l| %>
<p>
    <%= l.label :title %>
    <%= l.text_field :title %>
</p>

<p>
    <%= l.label :price %>
    <%= l.text_field :price %>
</p>

<p>
    <label>Upload a Picture</label>
    <%= l.file_field :image %>
    <%= l.hidden_field :image_cache %>
</p>
<div class="image-pre">
    <%= image_tag(@listing.image_url(:thumb)) if @listing.image? %>
</div>

<p>
    <%= l.label :body %>
    <%= l.text_area :body, :class => "tinymce" %>
    <%= tinymce %>
</p>

<%= l.submit %>
<% end %>
like image 641
greyoxide Avatar asked Jul 10 '13 16:07

greyoxide


1 Answers

In your listings_controller.rb, try something like:

def edit
    @listing = Listing.find(params[:id])
    @listing.image.cache!
end

Haven't tested this out myself, but I think it might work, given that image_cache field is used to circumvent this problem normally.

like image 150
cgat Avatar answered Nov 19 '22 08:11

cgat