Fixtures as a initial data.

昨日の続きで、Fixtureの問題。どうも、load_fixtures を再定義して、その中で自作でcreate_fixturesをしているのが非常に問題のようで、これを解決するには、fixture.rb を最初から最後まで舐め回す根性が必要そう。


で、ふと思いついたのは、Fixtureって、ERBなんだから、<% if RAILS_ENV == "test" %> とかできるんじゃないか?と思った件。

# WjUsers Initialize Data
Administrator:
  id                  : 1
  login_name          : <%= WjUser::PRIMITIVE_ADMINISTRATOR  %>
  login_password_hash : <%= WjUser.hash_password('password') %>
  email               : "admin@example.com"
  disable             : false
  nickname            : "Site Administrator"
  first_name          : "Site"
  last_name           : "Admin"
  description         : "Site Administrator"

# DO NOT CHANGE Anonymous User Data.
Anonymous:
  id                  : 2
  login_name          : <%= WjUser::PRIMITIVE_ANONYMOUS %>
  login_password_hash : <%= WjUser.hash_password('anonymous') %>
  email               : "anonymous@example.com"
  disable             : true
  nickname            : "anonymous"
  description         : "anonyouus user assigned to the not-login users"

# ---------------------------
# The folloings are test data
# ---------------------------
<% if RAILS_ENV == "test" %>
ma:
  id:                  3
  login_name:          ma
  login_password_hash: <%= WjUser.hash_password('hoge') %>
  email:               ma@webjourney.org
  disable:             false
  first_name:          "ma"
  last_name:           "-://ma"
  nickname:            "ma"
  description:         "ma"
<% end %>

とかやってみたら、普通に大丈夫だった。test の際は、load_fixture で全部読まれるし、test 以外の場合は admin, anonymous しか読み込まれないことを確認。

なんでこんなことに気がつかなかったのか、という話はあるけれど、これで完全に1テーブル1ファイルに統合できる。