読者です 読者をやめる 読者になる 読者になる

fixtureファイルに画像データを含めるには

Ruby

Ruby on Rails の開発でデータベースにテストデータを設定する fixture は便利ですが、カラムに画像データのようなバイナリーデータを入れたい場合は、下のようなコードで出来ます。

<%
def image_data(file_name)
  ActiveSupport::Base64.encode64(IO.read("test/fixtures/img/#{file_name}")).gsub(/^/, "    ")
end
%>

neko:
  screen_name: neko
  password: pass
  profile_image: !binary |
<%= image_data 'se_025.png' %>

kame:
  screen_name: kame
  password: pass
  profile_image: !binary |
<%= image_data 'se_055.png' %>

まず、fixtureで使われている YAMLフォーマットですが、 YAML Ain't Markup Language (YAML) 1.0 で定義されているように !binary の後にBASE64エンコードした文字列で扱えます。
また、fixtureの中には ERB が書けるので上のようなコードで画像ファイルを読み込み、BASE64エンコードする事でfixtureに画像データを含める事ができます。

ただし、YAMLはインデントに意味があるのでコードでは gsub(/^/, " ") を使いBASE64文字列をインデントしています。