トップ «前の日記(2005-02-10) 最新 次の日記(2005-02-17)» 編集

3 日坊主日記


2005-02-16 [長年日記]

_ [Delphi] Delphi 2005

申し込んでしまいました (Pro.)。

ap-list で使いたい方が居られるようだし、C# も付いてるらしいし。いじる時間は…

_ [Firebird][Rails] adapter

以前 ruby-interbase を RoR で使うためのアダプタを書いたのだけど (るびま4号の fn でちょろっと書いたやつ)、結局私的には MySQL (ruby-mysql) アダプタしか使っていない。

メンテナとしては日頃から使っておかないとだめだなあ。

_ [tDiary] スタイル

この日記はずっと tDiary スタイルで書いてきたのだけど、最近 Hiki に書くことが多くなって Wiki スタイルに慣れてきたので、移行しましょう、ということで select-style.rb を有効にして Wiki を選択。でも、スタイルの変更は来月から反映されるんだよね、たしか。

*test

**fufu-n

追記: まだ日記を書いていない日から反映されるそうです。

_ [Rails] has_and_belongs_to_many における fixtures

多対多の関係にある Model についてテストを行うとき、少なくとも ActiveRecord-1.6.0 では、いくつか注意すべき点がある。

例として Person n..n Group という Model があるとしよう。

* app/models/person.rb:
  class Person < ActiveRecord::Base
    has_and_belongs_to_many :groups
  end
  
* app/models/group.rb:
  class Group < ActiveRecord::Base
    has_and_belongs_to_many :people
  end

これに対する YAML fixtures は

* test/fixtures/people.yml:
  manabe:
    id: 1
    name: 真鍋
  
* test/fixtures/groups.yml:
  tencho:
    id: 1
    name: 店長

に加えて

* test/fixtures/groups_people.yml:
  tencho_manabe:
    group_id: 1
    person_id: 1

を用意することになる。groups_people.yml は script/generate では用意されないので、自分で作る必要がある。

この関係を直接 people.yml に書いてもうまくいかないことに注意しよう。

* test/fixtures/people.yml:
  manabe:
    id: 1
    name: 真鍋
    groups: [1]  # だめ

さて、この fixtures に対するテストは次のようになる。

* test/unit/person_test.rb:
  class PersonTest < Test::Unit::TestCase
    fixtures :people, :groups
    
    def setup
      create_fixtures "groups_people"
    end
    
    def test_manabe
      assert_equal("真鍋", @manabe.name)
      assert_equal 1, @manabe.groups.size
      assert_equal(["店長"], @manabe.groups.map{|group| group.name })
    end
  end

groups_people に対しては fixtures でなく setup の中で create_fixtures を使えばうまくいく。

現在の fixtures クラスメソッドは has_and_belongs_to_many 関係には対応できていないらしく、

    fixtures :people, groups_people  # だめ

こう書くと GroupsPerson を見てしまい、うまくいかない。

GroupTest も同様に書ける。

* test/unit/group_test.rb:
  class GroupTest < Test::Unit::TestCase
    fixtures :groups, :people
    
    def setup
      create_fixtures "groups_people"
    end
    
    def test_tencho
      assert_equal("店長", @tencho.name)
      assert_equal 1, @tencho.people.size
      assert_equal(["真鍋"], @tencho.people.map{|person| person.name })
    end
  end

_ [tDiary] スタイル(2)

上のようなセクションを tDiary スタイルで書こうとすると

  <p>...</p>
  <pre><%= src_inline <<'EOT'
  ...
  EOT
  %></pre>

などと書くことになるんだよねえ。

本日のツッコミ(全2件) [ツッコミを入れる]
# かずひこ (2005-02-16 19:35)

いえ、「まだ日記を書いていない日」で有効になります>新スタイル

# moriq (2005-02-16 19:48)

了解。

[]