【Rails】 CSV 파일에서 데이터 가져오기
절차는 다음 기사에서 설명한 것과 거의 동일합니다. 엄청 도움이 되었습니다.
【Ruby on Rails】 CSV 가져오기
구현
태스크 추가, 편집, 삭제 기능, 로그인 기능 등이 있는 TODO 앱에 CSV 업로드 기능을 구현해 갑니다.
Ruby on Rails로 간단한 앱 만들기
【Rails】 로그인 기능 구현
루비 표준 라이브러리 csv 추가
/config/application.rb
require 'csv'
roo라는 gem 추가
csv 파일을 로드할 gem
roo
를 추가합니다.Gemfile
gem 'roo'
terminal
$ bundle install
작업 목록 화면에 CSV 업로드용 필드 추가
/app/views/tasks/_logged_in.html.erb
<%= form_tag import_tasks_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "インポート" %>
<% end %>
컨트롤러에 액션 추가
Task.import(params[:file])
로 사용되고 있는 import
메소드는 나중에 정의합니다./app/controllers/tasks.controller.rb
def import
Task.import(params[:file])
redirect_to root_url
end
라우팅 설정
collection {post :import}
로 쓰면 resources :tasks
로 작성된 라우팅 이외의 tasks 컨트롤러 액션에 대한 라우팅을 추가할 수 있습니다./config/route.rb
resources :tasks do
collection {post :import}
end
terminal
$ rails routes
.
.
import_tasks POST /tasks/import(.:format) tasks#import
.
.
import_tasks
라는 명명된 경로가 추가되었습니다.모델에 CSV를 읽어 등록 처리를 구현
/app/models/task.rb
#importメソッド
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
# IDが見つかれば、レコードを呼び出し、見つかれなければ、新しく作成
task = find_by(id: row["id"]) || new
# CSVからデータを取得し、設定する
task.attributes = row.to_hash.slice(*updatable_attributes)
task.save
end
end
# 更新を許可するカラムを定義
def self.updatable_attributes
["title", "user_id"]
end
동작 확인
다음과 같은 파일을 준비합니다.
taskForTodoApp.csv
title,user_id
パンを買う,2
筋トレ,2
メルカリの発送,8
ティッシュを交換する,2
실행 결과
빠진 포인트
· CSV 파일에 user_id를 기재하지 않았으며 데이터베이스에 등록 할 때 오류가 발생했을 때 조금 빠졌습니다.
TODO
· TSV 파일도 가져올 수 있도록
참고
【Ruby on Rails】 CSV 가져오기
Reference
이 문제에 관하여(【Rails】 CSV 파일에서 데이터 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/d0ne1s/items/d49423796dd1c801afd3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)