8

私の Rails プロジェクトでは、Carrierwave を使用してフォグ経由で S3 に画像をアップロードしています。これまでのところ、CRUD スペクトルの Create Read 部分と Delete 部分が機能しています。

私の問題は編集/更新部分です。_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 %>
4

2 に答える 2

2

あなたのlistings_controller.rbで、次のようなことを試してください:

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

これを自分でテストしたことはありませんが、 image_cache フィールドが通常この問題を回避するために使用されていることを考えると、うまくいくと思います。

于 2014-02-06T17:28:28.043 に答える