理解Rails中的多态关联

时间:2016-05-10 08:03:34

标签: ruby-on-rails ruby-on-rails-4 polymorphic-associations

我有一个名为Quote的父模型。它有一个名为final_quote的属性,并有一个名为QuoteBoms的子模型,它有一个名为quote_final_quote和quantity和total_quote(= quote_final_quote * quantity)的属性

class Quote < ActiveRecord::Base
  has_many :quote_boms, dependent: :destroy
  accepts_nested_attributes_for :quote_boms, :reject_if => :all_blank, :allow_destroy => true

class QuoteBom < ActiveRecord::Base
    belongs_to :quote
    has_many :quotes
end

现在在嵌套模型中,我选择带有“belongs_to:quote”关联的引用但是has_many:引号不起作用,因为我只有一个quote_id列(我想这是问题所在)。我看到我需要将第三个类定义为quotebom_quote_id,但无法弄清楚究竟如何!

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

class Image < ActiveRecord::Base
    belongs_to :imageable, :polymorphic => true
end
class Profile < ActiveRecord::Base
   has_many :images, :as => :imageable
end
class Article < ActiveRecord::Base
   has_many :images, :as => :imageable
end

这就是我们制作单个图像模型的方式,它可以通过一个或多个模型访问

请参考这个 Link

答案 1 :(得分:0)

据我所知,您希望创建一个包含Quote和QuoteBom模型的数据库结构,其中Quote有很多QuoteBom,而QuoteBom属于很多行情。

在这种情况下,您需要使用has_and_belongs_to_many association

这需要添加到您的模型

class Quote < ActiveRecord::Base
  has_and_belongs_to_many :quote_boms
end

class QuoteBom < ActiveRecord::Base
  has_and_belongs_to_many :quotes
end

...以及以下迁移(假设Quote和QuoteBom已经存在)

class CreateQuotesAndQuoteBoms < ActiveRecord::Migration
  def change
    create_table :quote_quote_boms, id: false do |t|
      t.belongs_to :quote, index: true
      t.belongs_to :quote_bom, index: true
    end
  end
end

通过在模型中使用上述关联,并在数据库中使用此表,rails将自动处理quote和quote_doms之间的关联。因此,您还可以访问quote_dom.quotes,您说您在问题中无法做到这一点。

这是 NOT 多态关联。多态关联允许模型在单个关联中属于多种类型的其他模型。