在我的rails项目中,我使用Carrierwave通过雾将图像上传到S3。到目前为止,我有CRUD频谱的创建读取和删除部分工作。
我的问题是编辑/更新部分。我使用相同的_form.html.erb
来编辑我用于创建记录的内容。当我单击编辑链接时,表单会将所有数据加载到表单字段中以进行编辑,但图像除外。表单字段为空白,好像没有与记录关联的图像。
如何更新已保存到S3的图像?
模型/ listing.rb
class Listing < ActiveRecord::Base
attr_accessible :body, :price, :title, :image
mount_uploader :image, ListingUploader
end
Controllers / 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 :(得分:1)
在您的listing_controller.rb中,尝试以下内容:
def edit
@listing = Listing.find(params[:id])
@listing.image.cache!
end
我自己没有对此进行测试,但我认为它可能有用,因为image_cache字段用于正常规避这个问题。
答案 1 :(得分:0)
前一段时间,我已将应用程序升级到Rails 6,然后开始遇到此问题。
tldr;对于Rails 5.0及更高版本,您需要2.1.0或更高版本的载波gem。
我使用bundle outdated --strict
来查看是否可以升级载波。检查Gemfile以查看请求的版本是否设置正确。还要检查Gemfile.lock以查看是否有其他宝石阻止了它。您还需要升级它们。然后,我使用bundle update --strict
进行了实际的升级。