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