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ファイルに統合できる。