2013-07-10 47 views
5

在我的rails项目中,我使用Carrierwave通过雾将图像上传到S3。到目前为止,我已经创建了CRUD频谱的“创建读取”和“删除”部分。rails carrierwave编辑/更新表格

我的问题是编辑/更新部分。我使用相同的_form.html.erb来编辑我用于创建记录。当我单击编辑链接时,表单会将所有数据加载到表单域中进行编辑,但图像除外。表单域是空白的,就好像没有与记录相关的图像。

如何更新已保存到S3的图像?

型号/ listing.rb

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

    mount_uploader :image, ListingUploader 
end 

控制器/ listings_controller.rb(编辑/更新部分)

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 %> 
+0

你有什么解决方案?我面临同样的问题 – shajin

回答

0

在你listings_controller.rb,你可以试试:

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

没有测试过这一点我自己,但我认为它可能工作,因为image_cache字段用于正常绕过这个问题。