Fabrication
FabricationというのがMongoidのドキュメントに対応しているらしいので、テストの為に使ってみる。
とりあえず、次の事はわかった。
- spec/fabricators/model_fabricator.rb で Fabricator(:model)を作成。
- Fabricate(:model)でモデルを作成し保存。いろいろ試す。
今問題なのは、Fabricator作成時にembed documentをどう記述するか。
Mongoid側のドキュメントにある例が参考になりそうなので、やってみよう。
http://mongoid.org/docs/extensions/
[2010-11-25 追記]
次のような埋め込みドキュメントのモデルを想定する
class Person include Mongoid::Document field :name, :type => String embed_many :phones end class Phone include Mongoid::Document field :number, :type => String embedded_in :person, :inverse_of => :phones end
このときFabricatorはそれぞれこんな感じ。
Fabricator(:person) do name "hogehoge" phones(:count => 3) { |phone,i| Fabricate.build(:phone, :number => "090-0000-000#{i}") } end Fabricator(:phone) do number "03-0000-0000" end
ポイントはPhonesというMongoDBのコレクションが無いため、Fabricate.buildを用いてsaveしないようにする事。
たったこれだけだった。
[2011-01-15 追記]
embeds_manyの場合、上記の例での :count => 3 という部分が無いとエラーになる。
これはおそらく "<<" で挿入してくのではなく "=" で代入するように作用するためだろう。
Mongoid generate
Mongoidでモデルを作るときにTimestampとか付ける方法について軽くメモ。
rails g model model_name [field:type [...] ] [--timestamps=true] [--parent=parent_model_name]続きを読む
nokogiri 1.4.4でエラー
Ruby on Railsで業務アプリを構築中。
将来必要になるだろうjpmobileを入れてみたところ、入るバージョン0.1.3ではwebratを使用しており、その依存関係でnokogiriがインストールされる。
開発マシンのMac OS X 10.6ではそこでエラーが発生。
mkmf.logはこんな感じ。
have_func: checking for iconv_open() in iconv.h... -------------------- no "gcc -o conftest -I/usr/include/ruby-1.9.1/x86_64-darwin10.4.0 -I/usr/include/ruby-1.9.1/ruby/backward -I/usr/include/ruby-1.9.1 -I. -I/opt/local/include/libxml2 -I/usr/local/include/libxml2 -I/opt/local/include -I/usr/local/include -I/usr/include -I/usr/include -I/usr/include/libxml2 -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -O3 -ggdb -Wextra -Wno-unused-parameter -Wno-parentheses -Wpointer-arith -Wwrite-strings -Wno-missing-field-initializers -Wshorten-64-to-32 -Wno-long-long -pipe -g -DXP_UNIX -O3 -Wall -Wcast-qual -Wwrite-strings -Wconversion -Wmissing-noreturn -Winline conftest.c -L. -L/usr/lib -L/opt/local/lib -L/usr/local/lib -L/usr/lib -L. -lruby-static -lpthread -ldl -lobjc " Undefined symbols: "_libiconv_open", referenced from: _t in ccKMdG8x.o ld: symbol(s) not found collect2: ld returned 1 exit status
どうも、iconvライブラリの読み込みでうまくいってない感じ。
ググってみるとnokogiri 1.4.1の動作報告はガンガン出てるので、以下をGemfileに挿入。
gem 'nokogiri', '1.4.1'
うまくいきました、と。
(追記)Nokogiriインストール時に入れたlibxml2のバージョンが求めるものと違っていたようで、railsコマンドの度にずっと警告が出てる。
WARNING: Nokogiri was built against LibXML version 2.7.8, but has dynamically loaded 2.7.3
どうってことは無いのだが、気になる人は libxml2.7.3 にすべきだろう。私は面倒なのでこのままにする。
どうなるやら
とりあえず、メモ帳を用意。
書いていかねば。