2006-03-29

_ emacs-snapshot 20060323

何か文字の入力が非常に遅い。いらいらするので 20060315 に戻してみる。あー快適。 snapshot に感謝。

_ [rails] habtm なテーブルの attributes を更新

has_many :through はまだ readonly みたいなので、とりあえずこんな感じで。

module ActiveRecord
  module Associations
    module UpdateJoinAttributes
      def update_join_attributes(record, join_attributes = {})
        transaction(self, record) do
          collection = __send__(record.class.to_s.underscore.pluralize)
          collection.delete(record)
          !!collection.push_with_attributes(record, join_attributes)
        end
      end
    end
  end
end

これを habtm なクラスに include すれば、

>> group = Group.create(:name => "group")
>> member = Member.create(:name => "member")
>> group.members.push_with_attributes(member, :leader => true)
>> group.members.map{|member| [member.name, member.leader?]}
=> [["member", true]]
>> group.update_join_attributes(member, :leader => false)
>> group.members.map{|member| [member.name, member.leader?]}
=> [["member", false]]

こんな感じ。transaction にして、消して入れるイカサマメソッド。 カラムのタイプをちゃんと見てくれないので注意。

[]