【Ruby on Rails】 CSV 가져오기
참고 정도에 부디.
1.Rails 프로젝트 생성
1-1.Rails 프로젝트 작성
#terminal
rails new sample
1-2.Controller,View,Model 작성
#terminal
rails g controller Users
rails g model User name:string age:integer
rails db:migrate
1-3. CSV 출력용 샘플 데이터 작성
db/seeds.rbUser.create!(
id: 1,
name: "seinosuke",
age: 24
)
User.create!(
id: 2,
name: "takanosuke",
age: 31
)
User.create!(
id: 3,
name: "konosuke",
age: 30
)
1-4.DB에 데이터 저장
#terminal
rails db:seed
1-5.Controller에 액션 추가
app/contollers/users_contoller.rbdef index
@users = User.all
end
1-6.View 작성
app/views/users/index.html.erb<h1>ユーザー一覧</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.age %></td>
</tr>
<% end %>
</tbody>
</table>
1-7. Route 편집
config/routes.rbresources :users
1-8.rails s로 서버를 시작하고 URL : /useres를 지정하여 데이터 표시를 확인합니다.
2. CSV 업로드 기능 구현
2-1.ruby 표준 라이브러리인 csv 추가
config/application.rbrequire 'rails/all'
require 'csv'
2-2.Gem인 roo(Excel, CSV, OpenOffice, GoogleSpreadSheet를 열 수 있음)를 추가하여 bundle install
#Gemfile
gem 'roo'
2-3.View에 CSV 파일 업로드를위한 입력 필드 추가
app/views/users/index.html.erb<%= form_tag import_users_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "インポート" %>
<% end %>
※아래와 같은 입력 필드가 표시된다
2-4.Route 추가
config/routes.rbRails.application.routes.draw do
resources :users do
collection { post :import }
end
end
2-5.Controller에서 파일 수령, 리디렉션하는 import 추가
app/controllers/users_controller.rb def index
@users = User.all
end
def import
# fileはtmpに自動で一時保存される
User.import(params[:file])
redirect_to users_url
end
2-6.Model에서 csv를 읽어 DB에 등록하는 임포트 처리를 구현
app/model/user.rbclass User < ApplicationRecord
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
# IDが見つかれば、レコードを呼び出し、見つかれなければ、新しく作成
user = find_by(id: row["id"]) || new
# CSVからデータを取得し、設定する
user.attributes = row.to_hash.slice(*updatable_attributes)
# 保存する
user.save
end
end
# 更新を許可するカラムを定義
def self.updatable_attributes
["id", "name", "age"]
end
end
2-7. 이하 업로드용 파일을 준비
id,name,age
4,hiroto,60
2-8. 업로드(csv내 데이터가 표시되고 있는 것을 확인)
끝
Reference
이 문제에 관하여(【Ruby on Rails】 CSV 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/seitarooodayo/items/c9d6955a12ca0b1fd1d4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#terminal
rails new sample
#terminal
rails g controller Users
rails g model User name:string age:integer
rails db:migrate
User.create!(
id: 1,
name: "seinosuke",
age: 24
)
User.create!(
id: 2,
name: "takanosuke",
age: 31
)
User.create!(
id: 3,
name: "konosuke",
age: 30
)
#terminal
rails db:seed
def index
@users = User.all
end
<h1>ユーザー一覧</h1>
<table>
<thead>
<tr>
<th>ID</th>
<th>名前</th>
<th>年齢</th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.age %></td>
</tr>
<% end %>
</tbody>
</table>
resources :users
2-1.ruby 표준 라이브러리인 csv 추가
config/application.rb
require 'rails/all'
require 'csv'
2-2.Gem인 roo(Excel, CSV, OpenOffice, GoogleSpreadSheet를 열 수 있음)를 추가하여 bundle install
#Gemfile
gem 'roo'
2-3.View에 CSV 파일 업로드를위한 입력 필드 추가
app/views/users/index.html.erb
<%= form_tag import_users_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "インポート" %>
<% end %>
※아래와 같은 입력 필드가 표시된다
2-4.Route 추가
config/routes.rb
Rails.application.routes.draw do
resources :users do
collection { post :import }
end
end
2-5.Controller에서 파일 수령, 리디렉션하는 import 추가
app/controllers/users_controller.rb
def index
@users = User.all
end
def import
# fileはtmpに自動で一時保存される
User.import(params[:file])
redirect_to users_url
end
2-6.Model에서 csv를 읽어 DB에 등록하는 임포트 처리를 구현
app/model/user.rb
class User < ApplicationRecord
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
# IDが見つかれば、レコードを呼び出し、見つかれなければ、新しく作成
user = find_by(id: row["id"]) || new
# CSVからデータを取得し、設定する
user.attributes = row.to_hash.slice(*updatable_attributes)
# 保存する
user.save
end
end
# 更新を許可するカラムを定義
def self.updatable_attributes
["id", "name", "age"]
end
end
2-7. 이하 업로드용 파일을 준비
id,name,age
4,hiroto,60
2-8. 업로드(csv내 데이터가 표시되고 있는 것을 확인)
끝
Reference
이 문제에 관하여(【Ruby on Rails】 CSV 가져오기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/seitarooodayo/items/c9d6955a12ca0b1fd1d4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)