无效的单表继承类型..不是它的子类

man*_*nis 5 ruby-on-rails ruby-on-rails-4

我试图记录用户通过用户和交易之间的多对多关系进行的每次购买,并通过连接表"transactuins_users"链接它们.但我有两个问题,首先,我需要提供创建!对于被称为id的对象的方法,我认为Rails应该在给定关联的情况下自己解决这个问题.

此外,每当我调用purchase方法时,我都会收到错误"无效的单表继承类型:buy不是Transaction的子类"

class User < ActiveRecord::Base

  # Associations
  has_and_belongs_to_many :transactions

  def purchase(package)
    return false unless funds_available?(package) and !owns?(package)
      package.with_lock do

      # Makes transaction
      package.user_id = id
      package.save!
      withdraw(package.cost)

      # Records transaction
      values = {user_id: id, type: "buy", cost: package.cost}
      transactions.create values
    end
  end


class Transaction < ActiveRecord::Base

  # Associations 
  has_and_belongs_to_many :transactions

  # Validations
  validates :user_id, :cost, presence: true
Run Code Online (Sandbox Code Playgroud)

Pet*_*own 14

Active Record具有某些用于不同行为的架构约定.当您想在模型中使用单表继承时,这些约定之一是使用列名"type".它看起来不像你打算使用STI,所以我建议只将列的名称更改为"kind"或"category"之类的其他内容.

如果计划对各种类型的事务使用不同的行为,则可能需要考虑使用单表继承.


DDD*_*DDD 9

添加self.inheritance_column = nil到您的模型.类型是保留的.这将允许您使用它.