HABTM
{:NEW=>[MessageThread(id: integer, latest_message_id: integer), true]}
HM:T
{:NEW=>[Person(id: integer), false]}
.
HABTM
{:NEW=>[MessageThread(id: integer, latest_message_id: integer), false]}
HM:T
{:NEW=>[Person(id: integer), false]}
.
| require 'active_record' | |
| require 'minitest/autorun' | |
| ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") | |
| class Message < ActiveRecord::Base | |
| connection.create_table(table_name) | |
| connection.create_table :message_threads_messages, id: false do |t| | |
| t.references :message | |
| t.references :message_thread | |
| end | |
| has_and_belongs_to_many :message_threads, before_add: :callme | |
| has_many :topics | |
| has_many :people, through: :topics, before_add: :callme | |
| def callme(model) | |
| p :NEW => [model.class, model.new_record?] | |
| end | |
| end | |
| class Topic < ActiveRecord::Base | |
| connection.create_table(table_name) { |t| | |
| t.references :message | |
| t.references :person | |
| } | |
| belongs_to :person | |
| belongs_to :message | |
| end | |
| class Person < ActiveRecord::Base | |
| connection.create_table(table_name) | |
| has_many :topics | |
| end | |
| class MessageThread < ActiveRecord::Base | |
| connection.create_table(table_name) { |t| t.references :latest_message } | |
| has_and_belongs_to_many :messages | |
| belongs_to :latest_message, class_name: 'Message' | |
| end | |
| class BugTest < MiniTest::Unit::TestCase | |
| def test_before_add | |
| m = Message.create! | |
| puts "HABTM" | |
| m.message_threads << MessageThread.new | |
| m.topics << Topic.new | |
| puts "HM:T" | |
| m.people << Person.new | |
| end | |
| end |