尝试要求active_record时出错

时间:2015-03-29 20:50:18

标签: ruby activerecord

在我的Gemfile中,我有:

source 'https://rubygems.org'

gem 'pry'
gem 'pg'
gem 'activerecord'

在我的app.rb文件中,我有:

require 'active_record'
require 'pg'
require 'pry'



ActiveRecord::Base.establish_connection(
    database: 'hospital_db',
    adapter: 'postgresql'
)

class Doctor < ActiveRecord::Base
  has_many :appointments, :skills
  has_many :patients, through: :appointments
end

class Patient < ActiveRecord::Base
  has_many :appointments
  has_many :doctors, through: :appointments
end

class Appointment < ActiveRecord::Base
  belongs_to :patient
  belongs_to :doctor
end

class Skill < ActiveRecord::Base
  belongs_to :doctor
end

binding.pry

只要在终端中输入ruby app.rb,我就会收到以下错误:

/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::BASE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of BASE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::EXCEPTION_ALL
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of EXCEPTION_ALL was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::EXCEPTION_NaN
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of EXCEPTION_NaN was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::EXCEPTION_INFINITY
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of EXCEPTION_INFINITY was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::EXCEPTION_UNDERFLOW
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of EXCEPTION_UNDERFLOW was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::EXCEPTION_OVERFLOW
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of EXCEPTION_OVERFLOW was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::EXCEPTION_ZERODIVIDE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of EXCEPTION_ZERODIVIDE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_MODE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_MODE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_UP
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_UP was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_DOWN
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_DOWN was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_HALF_UP
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_HALF_UP was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_HALF_DOWN
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_HALF_DOWN was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_CEILING
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_CEILING was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_FLOOR
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_FLOOR was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::ROUND_HALF_EVEN
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of ROUND_HALF_EVEN was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_NaN
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_NaN was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_POSITIVE_ZERO
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_POSITIVE_ZERO was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_NEGATIVE_ZERO
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_NEGATIVE_ZERO was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_POSITIVE_FINITE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_POSITIVE_FINITE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_NEGATIVE_FINITE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_NEGATIVE_FINITE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_POSITIVE_INFINITE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_POSITIVE_INFINITE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::SIGN_NEGATIVE_INFINITE
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of SIGN_NEGATIVE_INFINITE was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::INFINITY
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of INFINITY was here
/Users/andrewkim/.rvm/gems/ruby-2.1.5@global/extensions/x86_64-darwin-14/2.1.0-static/bigdecimal-1.2.5/bigdecimal.bundle: warning: already initialized constant BigDecimal::NAN
/Users/andrewkim/.rvm/rubies/ruby-2.1.5/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:121: warning: previous definition of NAN was here
WARN: Unresolved specs during Gem::Specification.reset:
      json (>= 1.7.7, ~> 1.7)
      minitest (~> 5.1)
WARN: Clearing out unresolved specs.
Please report a bug if this causes problems.
/Users/andrewkim/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.1/lib/active_record/associations/builder/association.rb:64:in `initialize': undefined method `arity' for :skills:Symbol (NoMethodError)
    from /Users/andrewkim/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.1/lib/active_record/associations/builder/collection_association.rb:18:in `initialize'
    from /Users/andrewkim/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.1/lib/active_record/associations/builder/association.rb:47:in `new'
    from /Users/andrewkim/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.1/lib/active_record/associations/builder/association.rb:47:in `create_builder'
    from /Users/andrewkim/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.1/lib/active_record/associations/builder/association.rb:35:in `build'
    from /Users/andrewkim/.rvm/gems/ruby-2.1.5/gems/activerecord-4.2.1/lib/active_record/associations.rb:1259:in `has_many'
    from app.rb:13:in `<class:Doctor>'
    from app.rb:12:in `<main>'

我认为这很简单,但我再次尝试了捆绑安装,我无法弄清楚为什么它试图覆盖BigDecimal Constant或我如何修复它。我尝试过要求activerecordactive-record,但它们会给出一个简单的cannot load such file错误。所以require active_record必须是正确的。有什么想法或建议吗?

2 个答案:

答案 0 :(得分:2)

我不确定为什么bigdecimal会被多次加载。但是,除非你输入

,否则你的Gemfile实际上不会被使用
require "bundler/setup"

在脚本的顶部。

然而,实际错误是由于行

has_many :appointments, :skills

你不能列出这样的多个关联 - 它需要两次单独调用has_many:

has_many :appointments
has_many :skills

答案 1 :(得分:1)

这看起来不对我,我试图在API中找到它的引用:

class Doctor < ActiveRecord::Base
  has_many :appointments, :skills

正确的语法是:

 has_many :appointments
 has_many: skills