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