Rails ActiveRecord - 如何确定多态关系中的所有者?

时间:2013-08-02 13:56:07

标签: ruby-on-rails ruby activerecord rails-activerecord

我有一个可以被许多其他模型拥有的模型(它有许多外键)。

我将尝试在此模型上创建一个多态函数,该函数的行为取决于它的所有者是谁。不幸的是,我不确定活动记录代码会找到什么,当我进入binding.pry时,self对象没有任何我能说出的信息。

一个很好的例子是公司和个人都有税号

当Tax ID模型要做某事时,它想知道它的所有者是谁。有意义吗?

我的实际关系很好,但我怀疑这是关键点。

2 个答案:

答案 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