Topic: access by association breaks when I set config.cache_class = true
Have this weird issue that causes exceptions when I try to access an object through an association in a prod environment. I have been able to re-create the issue in either prod/dev configuration easily by flipping the config.cache_class flag. When the flag is set to true, accessing a simple belongs_to association returns the following stack trace:
1.9.2-p318 :001 > u=User.find(1)
User Load (6.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
=> #<User id: 1, email: "tm@portfoliolimits.com", encrypted_password: "$2a$10$MC44cekdIfWJvDgQFfPXquuQt0uqsZL7OVth8ifLK/C/...", account_id: 1, telephone_number: "444-444-4444", authorized_by_account_mgr: false, authorization_changed_at: nil, reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 2, current_sign_in_at: "2012-08-02 06:36:55", last_sign_in_at: "2012-08-02 06:26:39", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2012-08-02 06:24:46", updated_at: "2012-08-02 06:36:55">
1.9.2-p318 :002 > u.account
NoMethodError: undefined method `zero?' for nil:NilClass
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/alias_tracker.rb:30:in `aliased_name_for'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/alias_tracker.rb:18:in `aliased_table_for'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/join_helper.rb:15:in `block in construct_tables'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/join_helper.rb:14:in `each'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/join_helper.rb:14:in `construct_tables'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/association_scope.rb:37:in `add_constraints'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/association_scope.rb:31:in `scope'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/association.rb:98:in `association_scope'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/association.rb:87:in `scoped'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/singular_association.rb:42:in `find_target'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/association.rb:145:in `load_target'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/association.rb:55:in `reload'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/singular_association.rb:9:in `reader'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/activerecord-3.2.5/lib/active_record/associations/builder/association.rb:44:in `block in define_readers'
from (irb):2
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.5/lib/rails/commands/console.rb:47:in `start'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.5/lib/rails/commands/console.rb:8:in `start'
from /Users/tm/.rvm/gems/ruby-1.9.2-p318/gems/railties-3.2.5/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'1.9.2-p318 :003 > I can reproduce it with a bare bones User class
class User < ActiveRecord::Base
attr_accessible :email, :password, :password_confirmation, :remember_me, :account, :telephone_number, :authorized_by_account_mgr, :authorization_changed_at, :account_id
belongs_to :account
endFor completeness, I am including the Account class
class Account < ActiveRecord::Base
store :preferences, accessors: [:account_legal_name, :account_legal_name_color, :report_text_color, :report_font, :legal_disclaimer]
endThis is running on postgress version 9.1.3.
I can reproduce this on both my Mac and Ubuntu 10.4.
I must be doing something wrong, but I am out of ideas.
Thanks much for your help,
Takis
Last edited by takis (2012-08-02 14:29:17)