Rails3.0でcassandra_object
http://github.com/akm/cassandra_object_rails3 に、http://github.com/NZKoz/cassandra_object のtest以下のモデルをrails3.0アプリとして動くようにしました。
ただし、shouldaがまだrails3対応が終わってないみたいなので、 http://github.com/akm/cassandra_object_rails3/blob/master/test/test_helper.rb のコメントにあるようにshouldaのソースコードを直接変更する必要があります。
これでrake testをすると、cassandra_objectと同様に、
198 tests, 396 assertions, 0 failures, 2 errors
になるはず。
関連keyspaceに気をつけろ
cassandra_objectでは、associationメソッドを使って、belongs_to, has_manyに当たるものを宣言します。
http://github.com/NZKoz/cassandra_object/blob/master/test/fixture_models.rb
よくよく見てみると、関連のためのFKのようなカラムの定義がありません。どこに保存されているんだろうと思って調べてみたら、別のKeyspaceに保存されてました。
http://github.com/NZKoz/cassandra_object/blob/master/lib/cassandra_object/associations/one_to_one.rb
http://github.com/NZKoz/cassandra_object/blob/master/lib/cassandra_object/associations/one_to_many.rb
それぞれにcolumn_familyというメソッドが定義してあり、関連先のidなどはその名前の別のカラムファミリに、関連名をスーパーカラムとして、insertされます。
なので、cassandra_objectのテストで投入されたデータは以下のようになります。
cassandra> get CassandraObject.Customers['091e6658-6a33-11df-8608-e83b940b4438'] => (column=schema_version, value=0, timestamp=1275036334211015) => (column=last_name, value=Koziarski, timestamp=1275035327327099) => (column=first_name, value=Michael, timestamp=1275035327327099) => (column=date_of_birth, value=1980-08-15, timestamp=1275035327327099) Returned 4 results. cassandra> cassandra> get CassandraObject.Invoices['564ebdb8-6a35-11df-957a-ba403d66eadf'] => (column=total, value=3000.0, timestamp=1275036315832317) => (column=schema_version, value=2, timestamp=1275036315832317) => (column=number, value=1, timestamp=1275036315832317) => (column=gst_number, value=66-666-666, timestamp=1275036315832317) Returned 4 results. cassandra> cassandra> get CassandraObject.InvoiceRelationships['564ebdb8-6a35-11df-957a-ba403d66eadf'] => (super_column=customer, (column=^JY?j5?0hY?k8?, value=091e6658-6a33-11df-8608-e83b940b4438, timestamp=1275036329214711)) Returned 1 results. cassandra> cassandra> get CassandraObject.CustomerRelationships['091e6658-6a33-11df-8608-e83b940b4438'] => (super_column=invoices, (column=^Gb?j5?F??, value=564ebdb8-6a35-11df-957a-ba403d66eadf, timestamp=1275036329195299)) Returned 1 results. cassandra>