画像ファイルをアップロードして自由に表示したい!その2
前回、convert_temp_fileメソッド*1をコントローラの中で定義したが、本来、この処理はモデルに任せた方がスッキリする。
アップロードするファイルをモデルで変換する例
Software.new(params[:software]) のパラメーターに[:temp_file]要素が含まれていると、Softwareモデルでは、temp_file=() メソッドが呼び出されるようだ。それを利用して、以下のように変換処理を定義した。
コントローラー
#------ app/controller/softwares_controller.rb ------ class SoftwaresController < ApplicationController ...(途中省略)... def new @software = Software.new end def create #convert_temp_file #<---削除した @software = Software.new(params[:software]) #<---モデルのtemp_file=()メソッド呼出しのタイミング if @software.save flash[:notice] = 'Software was successfully created.' redirect_to :action => 'list' else render :action => 'new' end end ...(途中省略)...
モデル
#------ app/models/software.rb ------ class Software < ActiveRecord::Base def temp_file=(file) self.file_name = file.original_filename self.file_type = file.content_type self.file_data = file.read end end
これで、変換処理を気にせずに処理できる。とてもスッキリした!
*1:パラメータとして受け取ったTempfileオブジェクトをデータベースの形式にあわせて変換する。