プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Ruby on Rails
  • 【Ruby on Rails】CSVインポートやエクスポート機能について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Ruby on Rails】CSVインポートやエクスポート機能について

12.07

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

RailsでCSVのインポート、エクスポートを行う場合はRubyのcsvライブラリを使う必要があります。

csvライブラリの事前準備

config/application.rb

下記のrequire文を追加しましょう。

1
require 'csv'

Railsを再起動します。

エクスポート機能の実装

モデルクラス側

モデルクラス(app/models/モデル名.rb)の中でモデルのデータを取得してCSV文字列を返すようにします。allメソッドとかで全レコードを取得したりすると良いでしょう。

CSV.generateメソッド

CSV文字列を生成するメソッドです。

コントローラー側

下記のような記述をして該当URLにcsv形式で指定された場合のみcsvファイルをエクスポートするような設定にしましょう。

1
2
3
4
    respond_to do |format|
      format.html
      format.csv { send_data @モデル名.csv生成メソッド名, filename: "csvファイル名-#{Time.zone.now.strftime('%Y%m%d%S')}.csv" }
    end

なお、HTMLでアクセスされた場合はformat.htmlが動作し通常のHTMLページが返ります。

ビュー側

1
= link_to '出力', 「format: :csv」を指定したURL

エクスポート機能を実装したURL画面を「format:csv」により呼び出しましょう。するとCSV出力が自動で行われます。

インポート機能の実装

モデルクラス

モデルクラスに下記のようなメソッドを実装します。

1
2
3
4
5
6
7
  def self.import(file)
    CSV.foreach(file.path, headers: true) do |row|
      モデルインスタンス名 = new
      モデルインスタンス名.attributes = row.to_hash.slice(*csv_attributes)
      モデルインスタンス名.save!
    end
  end

file

アップロードされたCSVファイル内容のオブジェクトです。ファイル内容にアクセスできます。

CSV.foreach

CSVファイルから1行ずつ読み込みます。「headers: true」により1行目をヘッダ行として無視できます。

モデルインスタンス名.attributes

モデルインスタンの各属性にcsv一行の情報を加工して入れ込みます。

to_hashメソッドとsliceメソッド

to_hashメソッドでCSVのデータをハッシュの形({キー =>"値"})に整形します。sliceメソッドで本来インプットするつもりがなかった属性については排除をしています。

モデルインスタンス名.save!

モデルインスタンスをDBに登録します。

コントローラー側

モデルクラス側で作ったimportメソッドを呼び出しましょう。その際は「params[:file]」等でパラメータとしてCSVファイルのオブジェクトを渡しましょう。

スポンサーリンク
  • 2019 12.07
  • miyabisan2
  • コメントを書く
  • Ruby on Rails
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 06.19

    【Ruby on Rails】ビューテンプレート(ERB)の記述ルール

  2. 2019 12.01

    【Ruby on Rails】URLの指定方法について(URLヘルパーメソッド等)

  3. 2020 11.22

    【Ruby on Rails】「確認画面」の実装

  4. 2019 12.05

    【Ruby on Rails】「Action Mailer」について

  5. 2020 12.19

    【Ruby on Rails】モデルの基本、データ型、scope、メソッド(クラス、インスタンス)の違い、委譲

  6. 2020 07.26

    【Ruby on Rails】空文字、nilチェックの種類(present?、empty?、blank?、nil?)、ActiveSupport

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Web開発】「一覧画面」の設計について

【Web開発】「ページング機能」の設計

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー