티스토리 뷰
Ruby on rails - 유저 프로필 기능만들기
>1.carrier wave gem 설치
gem 'carrierwave'
bundle install 해준다.
>2. 이미지 업로더 생성
rails g uploader Image
위와 같이 만들면 app/uploaders 폴더에 image_uploader.rb 라는 파일이 생성됨
class ImageUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
storage :file
# storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
.
.
.
라는 내용의 파일입니다.
>3.User 모델 수정
#models/user.rb
mount_uploader :image, ImageUploader
rails g migration AddImageToUser image:string
위와 같이 해주면 image라는 attribute가 user에 선언된다.
#원하는 컨트롤러에 아래 액션을 넣어준다.
def create
@user = User.find(params[:user])
@user.image = params[:image]
@user.save
redirect_back(fallback_location: root_path)
end
위와 같은 액션을 만들어 컨트롤러에 추가해주었고,
#routes.rb
post 'users/profileImage'=> 'user#create'
라우트는위와 같이 추가해주었다.
<div class="user-container">
<div class="user-profile">
# user에게 이미지가 없으면 기본이미지를 띄워주고 이미지를 입력받음.
<% if @user.image.url.nil? %>
<img src="/assets/img/download.png" class="user-profile-image" alt="profile">
<p>프로필이 없습니다. 프로필을 등록해주세요</p>
<%= form_tag '/users/profileImage', method: :post, class: 'user-profile-form',multipart: true do %>
<input type="file" name="image" value="imgae">
<input type="hidden" name="user" value="<%=@user.id%>">
<input type="submit">
<% end %>
<% else %>
#유저에게 등록한 이미지가 있을경우 유저의 이미지를 보여줌
<img src="<%=@user.image.url%>" class="user-profile-image" alt="profile">
<% end %>
</div>
끄읕!
|결과
완벽-크
'Back end > Ruby on rails' 카테고리의 다른 글
Ruby on rails - 가상 은행 입금기능 만들기 (CR) (1) | 2018.03.23 |
---|---|
Ruby on rails -웹 aws에 배포하기 (0) | 2018.03.14 |
Ruby on rails-멋사 중앙대 웹사이트 만들기 (0) | 2018.03.06 |
Ruby on rails - 컨트롤러에서 flash로 alert 해주기 (0) | 2018.03.06 |
Ruby on rails - 좋아요 기능 만들기 (0) | 2018.03.05 |