【问题标题】:Understanding Polymorphic Associations in Rails了解 Rails 中的多态关联
【发布时间】:2023-03-05 17:04:01
【问题描述】:

我有一个名为 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 :quotes 不起作用,因为我只有一个 quote_id 列(我想这是问题所在)。我看到我需要将第三个类定义为quotebom_quote_id,但无法弄清楚到底如何!

任何帮助将不胜感激!

【问题讨论】:

  • 你想用它做什么?解释清楚
  • 尝试在QuoteBom 模型中使用has_and_belongs_to_many :quotes 而不是这两行。
  • 我正在构建一个应用程序,用户可以在其中为给定项目报价。通过嵌套模型,一个报价可以属于另一个报价,并且可以有多个数量。
  • @AmolUdage 谢谢!我会试试这个并更新!

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


【解决方案1】:
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

【讨论】:

  • 感谢您的帮助.. 非常感谢,我需要的是 quotebom 中的另一个外国 id 列
【解决方案2】:

据我所知,您希望创建一个包含 Quote 和 QuoteBom 模型的数据库结构,其中 Quote 有许多 QuoteBom 并且 QuoteBom 属于许多 Quotes。

既然如此,您将需要使用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。

不是多态关联。多态关联允许一个模型在一个关联中属于多个类型的其他模型。

【讨论】:

  • @hypem,感谢您的回答。我会尽快尝试的。
  • 在 has_many :through 和 has_and_belongs_to_many 之间选择.. 鉴于我在 QuoteBom 中有额外的属性,您是否建议使用 has_many :through 而不是 has_and_belongs_to_many?
  • 是的,如果关系需要属性、回调或验证,您应该改用 has many through 关系。
  • 你好hypem,再次感谢你的评论。我创建了这些表,但仍然有问题,我希望将 quote_boms 作为nested_attributes 模型放在引号内。您的指导将非常宝贵!
  • 嘿炒作,不要打扰..我找到了解决方案。我的问题根本不是这个。我只需要 QuoteBom 中的另一个外国 id 列引用 Quote。可以了,好了。感谢您的帮助.. 非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多