何か文字の入力が非常に遅い。いらいらするので 20060315 に戻してみる。あー快適。 snapshot に感謝。
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 にして、消して入れるイカサマメソッド。 カラムのタイプをちゃんと見てくれないので注意。