我试图记录用户通过用户和交易之间的多对多关系进行的每次购买,并通过连接表“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/