3
사용자 아바타를 저장하는 데는 클립이 잘 작동하지만 업데이트시 문제가 있습니다.레일 3 및 업데이트 방법 클립 문제
내보기에 사용자가 모델에 저장된 이미지가있는 경우 파일 업로드 필드 옆에 현재 이미지가있는 이미지 태그가 표시되므로 현재 아바타의 모습을 볼 수 있습니다.
이미지에 아무런 변화가 없지만 모델 유효성 검사가 실패하면 (예 : first_name 없음) 원래의 표시 이미지가 사라집니다. 즉, 사용자가 오류를 수정하고 이미지를 다시 선택하고 제출 (업데이트)하거나 이동해야합니다 오류없이 다시 시작하십시오. 어떤 아이디어? 미리 감사드립니다.
을 Heres 코드 :
모델
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 소스에 두 개의 양식 태그를 생성하는 방식으로보기를 작성한다는 의미입니다. fields_for, form_for 또는 다른 방법을 사용하여보기에서 새 양식을 시작할 수 있습니다. – Shaun
숀 Shaun, 도와 줘서 고마워. – Mike