3
ユーザーのアバターを保存するためにクリップがうまく機能していますが、アップデートで問題が見つかりました。Rails 3とpaperclip on updateメソッドの問題
私の見解では、モデルに画像が保存されている場合は、現在の画像がファイルアップロードフィールドの横に表示され、現在のアバターが何であるかがわかります。
イメージに変更はないが、モデルの検証に失敗した場合(first_nameがないなど)、元の表示イメージが消えます。つまり、エラーを修正してイメージを再選択して送信(更新)またはgoエラーなしでやり直すことができます。何か案は?前もって感謝します。
相続コード:
モデル
class User < ActiveRecord::Base
# Validation
validates :first_name, :presence => true
# Paperclip
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "70x70#" }
end
コントローラ
...
# GET /users/1/edit
def edit
@user = User.find(params[:id])
end
# POST /users
# POST /users.xml
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to(@user, :notice => 'User was successfully created.') }
format.xml { render :xml => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
# PUT /users/1
# PUT /users/1.xml
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(params[:user])
format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
...
ビュー
<%= form_for @user, :html => {:multipart => true} do |f| %>
<div class="row text">
<%= f.label :first_name %>
<div class="field">
<%= f.text_field :first_name %>
</div>
</div>
<div class="row">
<%= f.label :avatar %>
<div class="field">
<%= image_tag @user.avatar.url(:thumb) %>
</div>
<div class="field" id="avatar_upload">
<%= f.file_field :avatar %>
</div>
</div>
<div class="row actions"><%= f.submit %> or <%= link_to 'cancel', users_path %>.</div>
<% end %>
ありがとうございました!フォームオブジェクトと言うと、文字通り別のフォームやモデルを意味するのですか?同じフォーム内でfields_forを使用するようなものを意味しますか? (申し訳ありませんが、まだかなり新しいレールです!)返信いただきありがとうございます。 – Mike
後者です。オプション2では、HTMLソースに2つのフォームタグを生成するような方法でビューを作成します。 fields_for、form_for、または他の方法を使用してビュー内で新しいフォームを開始すると機能します。 – Shaun
お元気です、助けてくれてありがとう。 – Mike