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

Ruby on rails Rails ActiveRecord-如何确定多态关系中的所有者?,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,我有一个模型,可以拥有许多其他模型(它有许多外键) 我将尝试在这个模型上创建一个多态函数,它的行为取决于它的所有者。不幸的是,我不确定活动记录代码会是什么来发现这一点,当我进入binding.pry时,self对象没有任何信息可以告诉我 所以一个很好的例子就是公司和个人都有税务ID 当税务ID模型要做某事时,它想知道它的所有者是谁。有道理吗 我的实际关系有很多,但我怀疑这是症结所在。 class Tax belongs_to :taxable, :polymorphic => true

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

我将尝试在这个模型上创建一个多态函数,它的行为取决于它的所有者。不幸的是,我不确定活动记录代码会是什么来发现这一点,当我进入binding.pry时,self对象没有任何信息可以告诉我

所以一个很好的例子就是公司和个人都有税务ID

当税务ID模型要做某事时,它想知道它的所有者是谁。有道理吗

我的实际关系有很多,但我怀疑这是症结所在。


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

类别税 属于:应税,:多态=>true#税表需要应税类型应税id 结束

阶级公司 有一个:税,:as=>:应税 结束

班主任 有一个:税,:as=>:应税 结束

第一,应税的


假设以下结构

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.dampable
访问其所有者。要获取类型,请使用

tax.taxable.class.name


(在@SteveTurczyn和@MrYoshiji的帮助下。)

通常,在多态关联中,您有两列
\u type
\u id
。因此,我猜在您的税务表中,您可以找到这两列(在您的案例中,
owner\u type
owner\u id
)@MrYoshji-您是正确的,但在执行binding.pry时,我查看self对象以查看设置了哪个父id,但没有任何效果。我认为有某种类型的所有者访问器可以使代码更干净,但我真的找不到它。当您进行绑定撬动时,请查看多态列(可能是
类型
),它应该告诉您与其关联的模型。如果操作依赖于所属类,您还可以考虑将相关的方法移动到拥有的类。也就是说,如果你现在有一个<代码> TaskItIsApHytha方法< /C>,你可能会考虑把它移到<代码>公司>某个方法> <代码> >代码>这里需要注意的是,除非您可以通过允许
Person
Company
继承同一祖先(我对此表示怀疑)来强制执行API,否则如果存在多个
类型
选项(或可能是)的话,您就不希望这样做或者多个将被推送到所属类的方法。@wmjbyatt听起来不错!我可以将泛型保留在Tax ID级别,并根据需要在更高级别对其进行自定义。我将尝试这个解决方案:)你是对的,有一个对有多个并不重要。。使用其中一个
tax.taxable_type