简体   繁体   English

与多个连接的activerecord 3.2.2关联问题

[英]activerecord 3.2.2 association issues with multiple connections

can somebody point out some problems that might occur when im having association problem like this? 有人可以指出当我有这样的关联问题时可能会发生的一些问题吗?

my classes are: 我的课程是:

class BaseDB < ActiveRecord::Base
  self.abstract_class = true
  def self.load_configs
    self.configurations = YAML::load(load_file)
  end
  def self.load_file
    File.open(file_path)
  end
  def self.file_path
    File.join(File.expand_path('../../../',__FILE__),"config/database.yml")
  end
end

class User < BaseDB
has_many :things
end

class Thing < BaseDB
belongs_to :user
end

when I try to run in the console 当我尝试在控制台中运行时

       >BaseDB.load_configs
        => {"my_connection"=>{"database"=>"db2", "adapter"=>"mysql2", "password"=>secret, "host"=>"localhost", "user"=>"root"}, "my_other_connection_test"=>{"database"=>"db1", "adapter"=>"mysql2", "password"=>secret, "host"=>"localhost", "user"=>"root"}}
       > BaseDB.establish_connection :my_connection
        => #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x7f69c7a38b98 @mon_entering_queue=[], @automatic_reconnect=true, @mon_count=0, @queue=#<MonitorMixin::ConditionVariable:0x7f69c7a38a58 @waiters=[], @monitor=#<ActiveRecord::ConnectionAdapters::ConnectionPool:0x7f69c7a38b98 ...>>, @connections=[], @mon_owner=nil, @reserved_connections={}, @spec=#<ActiveRecord::Base::ConnectionSpecification:0x7f69c7a49718 @adapter_method="mysql2_connection", @config={:password=>"####", :adapter=>"mysql2", :user=>"root", :host=>"localhost", :database=>"db2"}>, @timeout=5, @size=5, @mon_waiting_queue=[]>

       > user = User.first
        =>  #<User id: 8325205, firstname: "goryo", middlename: nil, creeated_at: "2012-03-20 18:02:58", updated_at: "2012-03-20 18:02:58">

       > user.things

then i get these errors: 然后我得到这些错误:

ActiveRecord::ConnectionNotEstablished: ActiveRecord::ConnectionNotEstablished
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_pool.rb:374:in `retrieve_connection'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:168:in `retrieve_connection'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/connection_adapters/abstract/connection_specification.rb:142:in `connection'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:75:in `connection'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:54:in `initial_count_for'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:12:in `initialize'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:29:in `call'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:29:in `default'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:29:in `[]'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:29:in `aliased_name_for'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/alias_tracker.rb:17:in `aliased_table_for'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/join_helper.rb:15:in `construct_tables'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/join_helper.rb:14:in `each'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/join_helper.rb:14:in `construct_tables'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/association_scope.rb:37:in `add_constraints'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/association_scope.rb:31:in `scope'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/association.rb:98:in `association_scope'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/association.rb:87:in `scoped'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/collection_association.rb:380:in `find_target'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/collection_association.rb:333:in `load_target'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/collection_proxy.rb:44:in `__send__'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/collection_proxy.rb:44:in `load_target'
        from /usr/lib/ruby/gems/1.8/gems/activerecord-3.2.2/lib/active_record/associations/collection_proxy.rb:87:in `method_missing'
        from /usr/lib/ruby/1.8/irb.rb:310:in `output_value'
        from /usr/lib/ruby/1.8/irb.rb:159:in `eval_input'
        from /usr/lib/ruby/1.8/irb.rb:271:in `signal_status'
        from /usr/lib/ruby/1.8/irb.rb:155:in `eval_input'
        from /usr/lib/ruby/1.8/irb.rb:154:in `eval_input'
        from /usr/lib/ruby/1.8/irb.rb:71:in `start'
        from /usr/lib/ruby/1.8/irb.rb:70:in `catch'
        from /usr/lib/ruby/1.8/irb.rb:70:in `start'

ohh all I needed was to establish ActiveRecord::Base connection as an initial inorder to connect to other tables, it works! 哦,我需要做的是建立ActiveRecord :: Base连接作为初始顺序,以连接到其他表,它可以正常工作!

ActiveRecord::Base.establish_connection :my_connection

since my basedb is an abstract class, when you establish a connection ActiveRecord::Base w/c is the superclass doesnt have a connection yet you can check it out 由于我的basedb是抽象类,因此当您建立连接ActiveRecord :: Base w / c是超类时没有连接,但是您可以将其签出

>BaseDB.load_configs
>BaseDB.establish_connection :my_connection

try to query 尝试查询

>User.all
>BaseDB.connected?
=>returns true
>ActiveRecord::Base.connected?
=>nil

for more info about the implementation you can check this out http://api.rubyonrails.org/classes/ActiveRecord/Base.html 有关实现的更多信息,您可以查看http://api.rubyonrails.org/classes/ActiveRecord/Base.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM