【後編】SHIFT-JISのCSVをUTF-8でRailsにインポート (Rails 3.2.13) ~ActiveModelの活用


半澤です。

今回は、前回の記事に引き続き、
CSVのインポートについて説明しようと思います

★前回の記事【前編】SHIFT-JISのCSVをUTF-8でRailsにインポート (Rails 3.2.13)

前回の記事:コントローラーにデータ操作が担ってしまっている問題。

以下は、前回の記事からの抜粋。
エクセルで作ったSHIFT-JISの記事を
UTF-8でRailsにインポートする操作です。

ですが、この場合、本来コントローラーが担うべきでない
データ操作を行ってしまっているのが問題です。

解決策:ActiveModelを活用。生成したインスタンスに処理を担わせる。

というわけで太ったコントローラーを抹殺!
model,view,controllerを適切に分けてスマートにします。

今回の使用ファイル
ビュー     :views/hoges/import_new.html.haml
コントローラー :controllers/hoge_controller.rb
ActiveModel :forms/csv_import_form.rb

ビュー(views/hoges/import_new.html.haml)

コントローラー(controllers/hoge_controller.rb)

コントローラーがとてもシンプルになりました。
コントローラはCsvImportFormインスタンスの生成および、
そのモデルにparamsを引き渡すのみ。

今回のポイントは、
CsvImportFormというActiveModelのインスタンス。

ActiveModel(forms/csv_import_form.rb)

ActiveModelは、ActiveRecordとは違い対応するレコードが存在しないモデルです。
対応するレコードがないフォームを使う場合、ActiveModelを使用することで、
シンプルなビュー・コントローラーを構築しつつ、処理はモデルに書く事ができます。

では、CsvImportFormの中身です。

と、前回コントローラーに設置していた処理を、
CsvImportFormに一任。
Csv抽出操作からデータの保存操作を一括して行うモデルとして定義しました

この記事に対してコメントを書く