➜ ~ ruby habtm.rb
Active Record 4.1.1
-- create_table(:articles, {:force=>true})
-> 0.3158s
-- create_table(:publisher_magazines, {:force=>true})
-> 0.0005s
-- create_table(:articles_publisher_magazines, {:force=>true})
-> 0.0005s
#<ActiveRecord::Associations::CollectionProxy [#<Article id: 1>]>
➜ ~ ruby habtm.rb
Active Record 4.1.2.rc2
-- create_table(:articles, {:force=>true})
-> 0.3163s
-- create_table(:publisher_magazines, {:force=>true})
-> 0.0005s
-- create_table(:articles_publisher_magazines, {:force=>true})
-> 0.0005s
/home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activesupport-4.1.2.rc2/lib/active_support/inflector/methods.rb:253:in `const_get': uninitialized constant Publisher::Article (NameError)
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activesupport-4.1.2.rc2/lib/active_support/inflector/methods.rb:253:in `block in constantize'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activesupport-4.1.2.rc2/lib/active_support/inflector/methods.rb:236:in `each'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activesupport-4.1.2.rc2/lib/active_support/inflector/methods.rb:236:in `inject'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activesupport-4.1.2.rc2/lib/active_support/inflector/methods.rb:236:in `constantize'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activesupport-4.1.2.rc2/lib/active_support/core_ext/string/inflections.rb:66:in `constantize'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/builder/has_and_belongs_to_many.rb:18:in `klass'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/builder/has_and_belongs_to_many.rb:14:in `join_table'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/builder/has_and_belongs_to_many.rb:60:in `table_name'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/core.rb:151:in `arel_table'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/core.rb:167:in `relation'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/scoping/named.rb:33:in `default_scoped'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/scoping/named.rb:28:in `all'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/through_association.rb:17:in `block in target_scope'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/through_association.rb:16:in `each'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/through_association.rb:16:in `target_scope'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/association.rb:86:in `scope'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/collection_association.rb:404:in `scope'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/collection_proxy.rb:36:in `initialize'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/relation/delegation.rb:106:in `new'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/relation/delegation.rb:106:in `create'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/collection_association.rb:36:in `reader'
from /home/cmanning/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/activerecord-4.1.2.rc2/lib/active_record/associations/builder/association.rb:110:in `articles'
from habtm.rb:49:in `<main>'
Rails ActiveRecord 4.1.2.rc2 Namespaced HABTM Regression
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# this example works as written in rails 4.1.1 | |
#gem 'rails', '4.1.1' | |
gem 'rails', '4.1.2.rc2' | |
require 'active_record' | |
# Print out what version we're running | |
puts "Active Record #{ActiveRecord::VERSION::STRING}" | |
# Connect to an in-memory sqlite3 database (more on this in a moment) | |
ActiveRecord::Base.establish_connection( | |
:adapter => 'sqlite3', | |
:database => ':memory:' | |
) | |
# Create the minimal database schema necessary to reproduce the bug | |
ActiveRecord::Schema.define do | |
create_table :articles, :force => true do |t| | |
end | |
create_table :publisher_magazines, :force => true do |t| | |
end | |
create_table :articles_publisher_magazines, force: true do |t| | |
t.integer :article_id | |
t.integer :publisher_magazine_id | |
end | |
end | |
# Create the minimal set of models to reproduce the bug | |
module Publisher | |
def self.table_name_prefix | |
'publisher_' | |
end | |
end | |
class Article < ActiveRecord::Base | |
has_and_belongs_to_many :publisher_magazines, class_name: 'Publisher::Magazine', association_foreign_key: 'publisher_magazine_id' | |
end | |
class Publisher::Magazine < ActiveRecord::Base | |
has_and_belongs_to_many :articles, foreign_key: 'publisher_magazine_id' | |
# adding this line fixes the uninitialized constant exception | |
#, class_name: 'Article' | |
end | |
# Create some test data | |
magazine = Publisher::Magazine.create | |
article = Article.create | |
magazine.articles << article | |
magazine.save! | |
# exception: uninitialized constant Publisher::Article (NameError) | |
p Publisher::Magazine.where(id: magazine.id).first.articles |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment