Activerecord Rails 6子类don';t自动创建自己的类型

Activerecord Rails 6子类don';t自动创建自己的类型,activerecord,ruby-on-rails-6,single-table-inheritance,Activerecord,Ruby On Rails 6,Single Table Inheritance,在tuto()之后,我创建了一个类和子类: class Animal < ApplicationRecord belongs_to :tribe self.inheritance_column :race scope :lions, -> { where(race: 'Lion') } scope :meerkats, -> { where(race: 'Meerkat') } scope :wildboars, -> { where(race: '

在tuto()之后,我创建了一个类和子类:

class Animal < ApplicationRecord
  belongs_to :tribe
  self.inheritance_column :race

  scope :lions, -> { where(race: 'Lion') }
  scope :meerkats, -> { where(race: 'Meerkat') }
  scope :wildboars, -> { where(race: 'Wildboar') }

  def self.races
    %w(Lion Wildboar Meerkat)
  end
end
class动物{where(种族:'Lion')}
范围:猫鼬,->{where(种族:'Meerkat')}
经营范围:野猪,->{where(种族:'野猪')}
自我竞赛
%w(狮子、野猪、猫鼬)
结束
结束
和子类:

lion.rb
class Lion < Animal;end
meerkat.rb
class Meerkat < Animal; end
wildboar.rb
class Wildboar < Animal;end
lion.rb
狮子类动物;结束
猫鼬
猫鼬类<动物;结束
野猪
野猪类<动物;结束
还有一个与动物相关的课程:

class Tribe < ApplicationRecord has_many :animals # delegate :lions, :meerkats, :wild_boars, to: :animals delegate :lions, :meerkats, :wildboars, to: :animals end 类应用程序记录 你有很多动物吗 #代表:狮子、猫鼬、野猪、动物 代表:狮子,:猫鼬,:野猪,致::动物 结束 似乎是在图图中实现的种族,但当我创建Lion实例时,实例种族为零:

Lion.new
=> #<Lion id: nil, name: nil, age: nil, race: nil, created_at: nil, updated_at: nil, tribe_id: nil>
Lion.new
=> #
在现有部落中创建时也是如此:

tribe.animals << Lion.new(name:'toto',age:25)
   (0.2ms)  BEGIN
  Lion Create (1.8ms)  INSERT INTO "animals" ("name", "age", "created_at", "updated_at", "tribe_id") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["name", "toto"], ["age", 25], ["created_at", "2020-06-28 02:03:56.598482"], ["updated_at", "2020-06-28 02:03:56.598482"], ["tribe_id", 1]]
   (6.9ms)  COMMIT
  Animal Load (0.6ms)  SELECT "animals".* FROM "animals" WHERE "animals"."tribe_id" = $1 LIMIT $2  [["tribe_id", 1], ["LIMIT", 11]]
=> #<ActiveRecord::Associations::CollectionProxy [#<Animal id: 7, name: nil, age: nil, race: nil, created_at: "2020-06-27 23:59:30", updated_at: "2020-06-27 23:59:30", tribe_id: 1>, #<Animal id: 9, name: nil, age: nil, race: nil, created_at: "2020-06-28 00:16:43", updated_at: "2020-06-28 00:16:43", tribe_id: 1>, #<Animal id: 10, name: "toto", age: 25, race: nil, created_at: "2020-06-28 02:03:56", updated_at: "2020-06-28 02:03:56", tribe_id: 1>]>
部落动物#

这样做缺少什么?

正如塞巴斯蒂安·帕尔马(Sebastian Palma)在通信中提到的那样,这是一个语法错误:

self.inheritance_column = :race

=
丢失了

正如Sebastian Palma所提到的一个comm,对此的修复是一个语法错误:

self.inheritance_column = :race

=
缺失

self.heritation\u列:种族
打字错误?它应该是
self.heritation\u column=:race
(没有=它应该抛出一个错误)。再次感谢您Sebastian Palma!我花了很多时间在这样一个荒谬的语法错误上。然后我注意到Lion.new足以在DB中创建实例。不需要。保存或创建。是这样吗?很好的一个,即使是一个小错误,我认为值得添加您的答案。性传播感染源于Rails文档不够强大的东西。我认为在这种情况下你必须注意。为了在数据库中创建新记录,必须采取措施将对象数据持久化到数据库中
new
本身并不这样做,它只实例化给定类中的一个新对象,但是当您使用
时,很好地了解了,很好的指示!是否有
self.heritation\u列:种族
输入错误?它应该是
self.heritation\u column=:race
(没有=它应该抛出一个错误)。再次感谢您Sebastian Palma!我花了很多时间在这样一个荒谬的语法错误上。然后我注意到Lion.new足以在DB中创建实例。不需要。保存或创建。是这样吗?很好的一个,即使是一个小错误,我认为值得添加您的答案。性传播感染源于Rails文档不够强大的东西。我认为在这种情况下你必须注意。为了在数据库中创建新记录,必须采取措施将对象数据持久化到数据库中
new
本身并不这样做,它只实例化给定类中的一个新对象,但是当您使用
时,很好地了解了,很好的指示!