ruby-on-rails - 无效的单表继承类型 .. 不是的子类

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

我试图记录用户通过用户和交易之间的多对多关系进行的每次购买,并通过连接表“transactuins_users”将它们链接起来。但是我有两个问题,第一,我需要提供 create!方法和它被调用的对象的 id,我认为 Rails 应该根据关联自行解决这个问题。

此外,每当我调用购买方法时,都会收到错误“单表继承类型无效:购买不是交易的子类”

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

最佳答案

Active Record 有一定的schema conventions那是用于不同的行为。当您想在模型中使用单表继承时,这些约定之一是使用列名“type”。看起来您并不打算使用 STI,因此我建议您将列名更改为“种类”或“类别”等其他名称。

如果您计划为各种类型的事务设置不同的行为,那么您可能要考虑使用单表继承。

关于ruby-on-rails - 无效的单表继承类型 .. 不是的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22732783/

相关文章:

ruby-on-rails-4 - Rails 4 - 在 SQL 查询中使用 LIKE 运算符防止 SQL 注入(inject)

ruby-on-rails - 一页布局的联系我表格

javascript - 将 jQuery.pageless 与 turbolinks 结合使用

javascript - Rails jQuery Accordion

ruby-on-rails - 如何用对象数组做强参数

ruby-on-rails - Actioncable 连接的用户列表

ruby-on-rails - 使用 MiniTest 测试用户模型(设计身份验证)

ruby-on-rails - Rails 中的无效 JSON 字符串错误

ruby-on-rails - rails 中的路径解析

ruby-on-rails-4 - Sidekiq + 具有多个子域的设计邮件程序