【问题标题】:Getting error in console when checking the record检查记录时控制台出错
【发布时间】:2013-12-20 21:18:42
【问题描述】:

Salammobile::Sms.last

Salammobile::Sms 加载 (106.1ms) SELECT sms.* FROM sms ORDER BY sms.oppid DESC LIMIT 1 ActiveRecord::SubclassNotFound:单表继承机制未能定位子类:'international'。引发此错误是因为“类型”列保留用于在继承的情况下存储类。如果您不打算将此列用于存储继承类或覆盖 Salammobile::Sms.inheritance_column 以使用另一列存储该信息,请重命名此列。 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/inheritance.rb:153:in rescue in find_sti_class' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/inheritance.rb:147:infind_sti_class' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/inheritance.rb:136:in discriminate_class_for_record' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/persistence.rb:53:ininstantiate' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/querying.rb:45:in block in find_by_sql' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/result.rb:21:inblock in each' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/result.rb:21:in each' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/result.rb:21:ineach' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/querying.rb:45:in map' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/querying.rb:45:infind_by_sql' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/relation.rb:585:in exec_queries' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/relation.rb:471:inload' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/relation.rb:220:in to_a' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/relation/finder_methods.rb:340:infind_last' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/relation/finder_methods.rb:123:in last' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/relation.rb:146:inlast' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/activerecord-4.0.0/lib/active_record/querying.rb:3:in last' from (irb):12 from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/railties-4.0.0/lib/rails/commands/console.rb:90:instart' 来自 /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in start' from /usr/local/rvm/gems/ruby-1.9.3-p448@salamPlanet/gems/railties-4.0.0/lib/rails/commands.rb:64:in' 从 bin/rails:4:in `require'

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    Rails 中不能有一个名为type 的数据库列,除非它被用于ActiveRecord 继承机制。将该列重命名为其他名称。

    尝试在你的类定义中包含这个:

    inheritance_column = "class_type"
    

    这应该使它忽略type 列。

    【讨论】:

    • 我无权更改数据库列如何从该表中获取记录
    • class Salammobile::CountryRate
    【解决方案2】:
    class Salammobile::CountryRate < ActiveRecord::Base
      establish_connection("salammobile")
    
    
      self.table_name = 'smusers'
      inheritance_column = :_type_disabled
    
    end
    

    这基本上不起作用,我正在使用其他服务器上存在的外部数据库,而应用程序正在使用不同的服务器我现在把这段代码放在它的工作上

    class   Salammobile::CountryRate < ActiveRecord::Base
          establish_connection("salammobile")
    
          self.table_name = 'smusers'
    
          self.inheritance_column = nil
        end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-15
      相关资源
      最近更新 更多