我有一个可以被许多其他模型拥有的模型(它有许多外键)。
我将尝试在此模型上创建一个多态函数,该函数的行为取决于它的所有者是谁。不幸的是,我不确定活动记录代码会找到什么,当我进入binding.pry时,self对象没有任何我能说出的信息。
一个很好的例子是公司和个人都有税号
当Tax ID模型要做某事时,它想知道它的所有者是谁。有意义吗?
我的实际关系很好,但我怀疑这是关键点。
答案 0 :(得分:3)
假设以下结构,
class Tax
belongs_to :taxable, polymorphic: true
end
class Company
has_many :taxes, as: :taxable
end
class Person
has_many :taxes, as: :taxable
end
create_table :taxes do |t|
t.integer :taxable_id
t.string :taxable_type
t.timestamps
end
每个税务记录都可以使用tax.taxable
访问其所有者。要获取类型,请使用
tax.taxable.class.name
或
tax.taxable_type
(在@SteveTurczyn和@MrYoshiji的帮助下。)
答案 1 :(得分:-1)
class Tax
belongs_to :taxable, :polymorphic => true # tax table needs taxable_type taxable_id
end
class Company
has_one :tax, :as => :taxable
end
class Person
has_one :tax, :as => :taxable
end
Tax.first.taxable