아침바라기의 이야기

[ROR] Carrierwave uploader 기본 사용법 본문

개발이야기/Ruby on Rails

[ROR] Carrierwave uploader 기본 사용법

아침바라기 2015. 10. 4. 21:35
레일즈(Rails) 파일업로드 Gem 중 많이 쓰이는 것은 3가지다.
1. Paperclip
2. Carrierwave
3. dragonfly

추측컨데, 업로드 사용이 간편한 Gem일수록 사용률이 높은듯하다. 
그런데 안타깝게도 내가 사용하는건 2번 carrierwave라 이 내용에 대해 설명하고자 한다.

이 파일 업로더는 기능이 다양하다는 장점을 가지고 있다.

그럼 carrierwave 기본 사용법에 대해 알아보자.

우선 설치방법이다.

설치방법

설치 방법은 심플하다

1. gem을 인스톨

$ gem install carrierwave


2. Gemfile에 추가

gem 'carrierwave'


사용방법

그럼 이제 어떻게 사용하지?

예를 들어 설명해보겠다.

모 웹사이트 구축중에 사용자 프로필에 프로필 사진을 업로드 기능을 만든다고 가정하자.

우리가 미리 정의한 Active record 클래스 이름은 UserProfile이다.

 
1. UserProfile 클래스에 프로필 사진인 photo를 추가하고 내가 만든 업로더를 마운트 시킨다
    

     class UserProfile < ActiveRecord::Base

    # 프로필 사진과 업로더 클래스 이름을 파라미터로 넘긴다.                                        mount_uploder :photo, PhotoUploader 


2. PhotoUploader를 만들어준다.

     class PhotoUploader < CarrierWave::Uploader::Base

def store_dir

# 파일 저장할 path를 리턴한다

end 

end



3. UserProfileController 의 user_profile 파라미터 permit에 photo 필드 추가

     def user_profile

params.require(:user_profile).permit(:photo)

    end


 

4. erb 파일에 file field 선언

<%= form_for @user_profile, html: { multipart: true } do |f| %>

<%= f.file_field :photo %>

<% end %>

5. 끝!


그리고 이제 이미지를 하나 아무거나 업로드해보자.

그럼 user_profiles 테이블에 photo 컬럼에 업로드한 파일 이름이 기본값으로 들어가 있는 것을 확인할 수 있다.

여기에 이미지 삭제를 해야한다고 생각해보자. 

어떻게 해야할까??

답은 간단하다. 체크 박스로 remove_{마운트한 필드 이름} 으로 추가하고 폼을 서밋하면 된다.  carrierwave가 알아서 삭제해준다.

 <label>

<%= f.check_box :remove_photo %> 프로필 삭제 

 </label>

    

이러면 DB에 null 값으로 들어간 것을 확인할 수 있다.


만약, controller 등 에서 파일을 직접 지우고 싶다면 remove_photo 메소드를 를 호출해주면 된다.

@user_profile.remove_photo!

    


참으로 레일즈스러운 삭제 방법이다.

참고