일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 데스크탑애플리케이션
- 홈페이지 개발하기
- 장고
- 루비 온 레일즈
- rails review
- rails
- Ruby On Rails
- 레일즈
- 모닝버드
- 예스인테리어
- 루비
- express-mysql-session
- 모듈화
- nodejs api
- 웹 프로그래밍
- django 공부하기
- Python
- css3
- node.js
- jquery
- 프론트엔드
- 파이썬 웹 프레임워크
- 웹 프론트엔드
- nodejs
- 웹프로그래밍
- 루비온레일즈
- Django
- 꿀팁
- 웹 프로그래밍 입문
- 장고 공부하기
- Today
- Total
노래하듯 이야기하고, 춤추듯 정복하라.
[Ruby & Rails] Faker젬을 사용해 더미데이터 입력하기 본문
# 서두
안녕하세요 오랜만에 포스팅다운 포스팅을 해보려합니다.
도움이 될진 모르겠지만, Faker 젬을 매우 유용하게 써보긴 처음입니다.
# Faker Gem
:Git => https://github.com/stympy/faker
:Gem => https://rubygems.org/search?utf8=%E2%9C%93&query=faker
# 사용법
우선 프로젝트 폴더 내부
/lib/tasks 폴더 안에 임의의 rake 파일을 생성합니다. 파일명은 아무거나 해도 됩니다.
필자는 my_task.rake 라고 파일명을 명명했습니다.
다음 Gemfile 파일에 페이커 젬을 추가해줍니다.
# Gemfile
gem 'faker'
다음 터미널에서 bundle install 해줍니다.
# my_task.rake 파일 코딩하기
# 메인기능을 테스트하기 위한 더미데이터를 넣습니다.
# rake 명령어를 사용해야 합니다.
# User -> Proudcts -> Manuals -> Reviews 순으로 데이터를 넣어주세요.
# 명령어는 각 task 주석에서 볼 수 있습니다.
# 명령어를 터미널창에 순서대로 입력해주세요.
# "1" Add Users: add_users
phone = ['010-2323-2323', '010-7323-1113', '010-9003-2323', '010-1723-2543', '010-1003-4823', '010-2236-4829']
task :add_users => [:environment] do
(1..10).each do
pass = Faker::Internet.password(8)
User.create({
:email => Faker::Internet.email,
:nickname => Faker::Internet.user_name(5..8),
:phone => phone.sample,
:password => pass,
:password_confirmation => pass
})
end
end
# "2" Add Products: 명령어 => rake add_products
task :add_products => [:environment] do
category = ['피부', '화장', '헤어', '바디']
age = ['10대', '20대초반', '20대후반', '30대초반', '30대후반', '40대이상']
skintype = ['건성', '지성', '복합성', '중성', '민감성']
price = [20000, 30000, 31000, 15600, 23000, 22200, 34000, 65300, 20500, 8000, 9000, 8500, 31000, 153000, 2000, 15200 ]
bool = [true, false]
skincolor = [1,2,3,4,5,6,7,8,9,10,22,21,23,24,25,14,15,16,17,18]
(1..20).each do
Product.create({:category => category.sample, :age => age.sample, :skintype => skintype.sample,
:brand => Faker::Lorem.word, :name => Faker::Lorem.word, :price => price.sample,
:image => File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample),
:contents => Faker::Lorem.paragraph,
:allergy => bool.sample, :atopy => bool.sample, :pimple => bool.sample,
:bb => bool.sample, :lip => bool.sample, :eyebrow => bool.sample, :eyeline => bool.sample, :color => bool.sample,
:skincolor => skincolor.sample})
end
end
# "3" Add Manuals: 명령어 => rake add_manuals
task :add_manuals => [:environment] do
category = ['피부', '화장', '헤어', '바디']
age = ['10대', '20대초반', '20대후반', '30대초반', '30대후반', '40대이상']
skintype = ['건성', '지성', '복합성', '중성', '민감성']
price = [20000, 30000, 31000, 15600, 23000, 22200, 34000, 65300, 20500, 8000, 9000, 8500, 31000, 153000, 2000, 15200 ]
bool = [true, false]
skincolor = [1,2,3,4,5,6,7,8,9,10,22,21,23,24,25,14,15,16,17,18]
(1..20).each do
Manual.create({:category => category.sample, :title => Faker::Lorem.word,
:image => File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample),
:content => Faker::Lorem.paragraph,
:age => age.sample, :skintype => skintype.sample,
:allergy => bool.sample, :atopy => bool.sample, :pimple => bool.sample,
:bb => bool.sample, :lip => bool.sample, :eyebrow => bool.sample, :eyeline => bool.sample, :color => bool.sample,
:skincolor => skincolor.sample})
end
end
# "4" Add Reviews: 명령어 => rake add_reviews
task :add_reviews => [:environment] do
products = Product.all
users = User.all
(1..80).each do
product = products.sample
user = users.sample
Review.create({
:user_id => user.id,
:product_id => product.id,
:rating => [0,1,2,3,4,5].sample,
:review => Faker::Lorem.sentence
})
end
end
# 코드 핵심파트 설명
더미데이터가 필요한 모델별로 더미데이터 입력 task를 분리해서 코딩해 주었습니다.
그래야 활용이 편하고 시각적으로 안정적입니다!
처음에
[:environment] 이부분을 빠뜨렸는데요.
그 결과 rake something_task 형식으로 task를 실행했을 때 모델을 인식하지 못했습니다.
반드시 [:environment] 코드를 확인해주세요!
# Faker 젬 사용시 주의점
- Faker::Internet.username -> user_name
페이커 젬을 사용할 시 git을 보고 사용하시면 되는데 git의 내용에서 작동하지 않는 것들이 있습니다.
우선 첫번째로 Faker::Internet.username인데요. 이대로 입력하시면 에러가 발생합니다.
-> Faker::Internet.user_name 으로 사용해주세요!
- Faker::Avatar.image
이것또한 작동하지 않았습니다. 그래서 제가 찾은 해결방법은 바로 아래 코드입니다.
:image => File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample)
프로젝트 디렉토리에 sampleimages 폴더를 만든 후, 귀찮더라도 5~10개 정도의 이미지를 넣어줍니다.
그리고 위의 File.open 메서드를 이용하여 폴더안에서 랜덤하게 이미지를 가져와 저장해 줍니다.
'프로그래밍 > Ruby & Rails' 카테고리의 다른 글
[Ruby On Rails] Mac OS - rmagick Gem 설치 시, 서버 세팅 (0) | 2018.12.20 |
---|---|
[Ruby On Rails] Rails에 MySQL 연동하기 (0) | 2018.11.17 |
[Ruby & Rails] 관리자 권한 부여하기, 사용한 Gem: Cancancan + Rolify (1) | 2018.08.15 |
[Ruby & Rails] Post모델에 별점(Review) 기능 추가하기2 (0) | 2018.08.10 |
[Ruby on Rails] Post모델에 별점(Review) 기능 추가하기 (0) | 2018.08.10 |