我有三個模型:
class Product
belongs_to :object, polymorphic: true
belongs_to :membership, foreign_key: :object_id
belongs_to :ticket, foreign_key: :object_id
end
class Membership
end
class Ticket
end
說,我有一個product關聯的membership. 例如,我可以這樣做:product.membership或product.object
但在這種情況下,我也可以這樣做product.ticket。
在這種情況下,如何確保 Rails 引發錯誤?
uj5u.com熱心網友回復:
您可能應該看看這篇文章,其中參考了一些針對此問題的解決方案。也許這篇文章也能幫到你。
這些帖子中列出的解決方案:
在 Rails 5.2
belongs_to :membership, -> { includes(:object).where(products: { object_type: Membership.to_s }) }, foreign_key: :object_id belongs_to :ticket, -> { includes(:object).where(products: { object_type: Ticket.to_s }) }, foreign_key: :object_id在 Rails 4.2 上(但在 6.1 上似乎已棄用,因為
foreign_type不再允許)belongs_to :membership, -> { where(notes: { object_type: :Membership }) }, foreign_key: :object_id, foreign_type: :Membership, optional: true在 Rails 4.1
class Product < ActiveRecord::Base # The true polymorphic association belongs_to :object, polymorphic: true # The trick to solve this problem has_one :self_ref, :class_name => self, :foreign_key => :id has_one :membership, :through => :self_ref, :source => :object, :source_type => Membership has_one :ticket, :through => :self_ref, :source => :object, :source_type => Ticket
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343440.html
上一篇:Rails在分片中加入錯誤的表
