Rails:如何使has_many:通过关联工作与单表继承

时间:2013-09-04 12:36:06

标签: ruby-on-rails activerecord ruby-on-rails-3.2 single-table-inheritance model-associations

所以在我目前的项目中,我有一个可以有不同类型的交易的文章模型。它有一个主要的交易,但在某些情况下它可以有多个子交易。

到现在为止,我将它设置为:

class Article < ActiveRecord::Base
  has_one :transaction, inverse_of: :article
  has_many :partial_transactions, through: :transaction, source_type: 'MultipleFixedPriceTransaction', source: 'PartialFixedPriceTransaction', inverse_of: :articles
end

class Transaction < ActiveRecord::Base
  belongs_to :article, inverse_of: :transaction # Gets inherited to all kinds of Transaction subclasses
end

class MultipleFixedPriceTransaction < Transaction
  has_many :children, class_name: 'PartialFixedPriceTransaction', foreign_key: 'parent_id', inverse_of: :parent
end

class PartialFixedPriceTransaction < Transaction
  belongs_to :parent, class_name: 'MultipleFixedPriceTransaction', inverse_of: :children
  belongs_to :article, inverse_of: :partial_transactions # Overwriting inheritance
end

现在有了这个设置,我有时会遇到像

这样的错误
ActiveRecord::Reflection::ThroughReflection#foreign_key delegated to
source_reflection.foreign_key, but source_reflection is nil:

#<ActiveRecord::Reflection::ThroughReflection:0x00000009bcc3f8 @macro=:has_many,
@name=:partial_transactions, @options={:through=>:transaction,
:source_type=>"MultipleFixedPriceTransaction",
:source=>"PartialFixedPriceTransaction", :inverse_of=>:articles, :extend=>[]},
@active_record=Article(id: integer ...

顺便说一下,我使用source和source_type参数进行了大量实验,并且只有示例。我真的不知道如何处理它们。

那么,我怎样才能做到这一点?如何正确设置关联?

谢谢。

0 个答案:

没有答案