この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
http://d.hatena.ne.jp/zenpou/:titileにて公開した記事を公開します。
railsで、Resourceというmodelに画像を保存する時、
new_fileというメソッドを使ってデータを保存する様につくったんですが、
そういうとき、file_field :record, :resourceのデータを受け取っても
そのまま代入できないので、その問題に対する対処です。
alias :resource_old= :resource=
define_method("resource=") do | value |
if value.class == ActionController::UploadedTempfile
resource = Resource.new_file(value, value.original_filename)
self.send :resource_old= , resource
elsif value.class == Resource
self.send :resource_old= , value
else
nil
end
end
model側からbelongs_toでresourceに連携した後に定義される代入を
オーバーライドしてます。
こうするとパラメータの中身をそのまま出せるので非常に楽です。