Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord:什么时候是多态的_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails ActiveRecord:什么时候是多态的

Ruby on rails ActiveRecord:什么时候是多态的,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我总是发现关于多态性关联的文档不清楚。例如,来自: 对于多态关联,一个模型可以在单个关联上属于多个其他模型 我发现在很多情况下,一个模型属于多个其他模型。例如,如果我有一个公司模型、一个发票模型和一个应付账款模型,我发现我可以简单地执行以下操作: class Company < ActiveRecord::Base has_many :invoices has_many :account_payables end # not shown: Invoice and Account

我总是发现关于多态性关联的文档不清楚。例如,来自:

对于多态关联,一个模型可以在单个关联上属于多个其他模型

我发现在很多情况下,一个模型属于多个其他模型。例如,如果我有一个公司模型、一个发票模型和一个应付账款模型,我发现我可以简单地执行以下操作:

class Company < ActiveRecord::Base
   has_many :invoices
   has_many :account_payables
end
# not shown: Invoice and AccountPayable classes 
# with corresponding belongs_to associations
class公司
这似乎总是很有效。虽然正如我所说,当我阅读多态性的帮助时,我觉得我应该在上面的案例中使用它

但我认为那是不对的。如果我上面的简单示例是多态的,那么这意味着一个模型只能被另一个模型“使用”,除非您是多态的。这感觉限制太大了。此外,多态接口名称示例往往是动词(例如“可注释”等)。我如何把上面的例子变成动词?有同伴吗

也许文档试图告诉我,当一个模型实例只能属于一个关联的实体,而不能属于更多的实体时,这是非常有用的。例如,如果一家公司只能属于发票或AP(不能同时属于两者)。如果是这样的话,在我看来,它更像是单表继承,而不是普通的old has\u many/behold\u。使用STI,我可以拥有
类债权人
类债务人
,并分别与发票和应付账款关联。在我上面的例子中,很有可能某个公司是我开发票的人,也欠我钱(即应付账款)

感谢您的澄清……

您声明:

我发现我有很多例子,其中一个模型 属于多个其他模型。 例如,如果我有一个公司模型, 发票模型和应付账款 模型,我发现我可以简单地做到:

class Company < ActiveRecord::Base
   has_many :invoices
   has_many :account_payables
end
# not shown: Invoice and AccountPayable classes 
# with corresponding belongs_to associations
但你给出的例子实际上是一个模型,它比其他模型“有很多”

带有“所属对象”的模型意味着它必须指定外键,如果它属于多个模型,那么如何知道外键所指的模型?多态关联可以帮助您解决这个问题


您上面给出的示例是完全正确的,不需要多态关联。

您的问题相当混乱,我认为您的模型不应该是多态的

需要多态性的场景示例

(articles.rb) has_many article_comments
(photos.rb)  has_many photo_comments
(article_comments.rb) has_many article_comment_comments
(photo_comments.rb) has_many photo_comment_comments # repeat for comments on commments', comments etc.

v

(articles.rb) has_many comments, :as => commentable
(photos.rb) has_many comments, :as => commentable
(comments.rb) has_many comments, :as => commentable

你找到了我困惑的根源。谢谢