Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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 Rails,我认为多态关联被高估、限制和不必要是错误的吗?_Ruby On Rails_Polymorphic Associations_Sti - Fatal编程技术网

Ruby on rails Rails,我认为多态关联被高估、限制和不必要是错误的吗?

Ruby on rails Rails,我认为多态关联被高估、限制和不必要是错误的吗?,ruby-on-rails,polymorphic-associations,sti,Ruby On Rails,Polymorphic Associations,Sti,好的,所以我一直在尝试不同的方式来组织我的Rails 3应用程序,包括STI和多态关联。我试图找到一种既易于编码,又易于使用的方法,并且最有可能与将来的任何更改兼容。在阅读了大量可选的(通常缺乏和写得很差的)文章之后,我得出了一些自己的结论 首先,使用STI似乎是最安全的选择,因为它易于编码、易于阅读和使用,并且易于处理未来的任何更改,而无需太多的重写。我能看到的唯一合理的缺点是,在数据库中,数据中会有“漏洞”。有些人认为这是件坏事。但是,如果这是唯一的缺点,而结果是让你的余生变得更加轻松,那么

好的,所以我一直在尝试不同的方式来组织我的Rails 3应用程序,包括STI和多态关联。我试图找到一种既易于编码,又易于使用的方法,并且最有可能与将来的任何更改兼容。在阅读了大量可选的(通常缺乏和写得很差的)文章之后,我得出了一些自己的结论

首先,使用STI似乎是最安全的选择,因为它易于编码、易于阅读和使用,并且易于处理未来的任何更改,而无需太多的重写。我能看到的唯一合理的缺点是,在数据库中,数据中会有“漏洞”。有些人认为这是件坏事。但是,如果这是唯一的缺点,而结果是让你的余生变得更加轻松,那么谁在乎呢

其次,多态关联似乎只在某些情况下有效,而不是在所有情况下。此外,似乎在任何可以使用多态关联的情况下,也可以只使用STI(反之亦然)。那么,为什么还要费心研究多态关联呢?只是为了把那些讨厌的“洞”从你的数据库里弄出来?但是,您正在添加看起来非常相似的重复字段和额外表,更不用说多组控制器、模型和视图等

第三,即使你确定了一个适当的时间来使用多态关联,并正确地实现它,事情可能会发生变化,你会发现自己不得不删除多态性的东西,最终实现STI。我不认为这种情况会反过来发生。STI似乎可以很好地处理任何设置,而多态关联似乎需要“恰到好处”才能像广告中所宣传的那样工作


现在,我不是最聪明的人,所以这些可能是错误的想法和/或短视的观察-如果你认为我错了,请告诉我,并尝试提供一些好的证据来支持你的案例

如果我把你的论点推到最远的结论,我会得出这样的结论:为什么还要麻烦拥有多个数据库表呢?只需使用一个表和STI来存储所有数据


另外,考虑书店、作者、出版商、书籍和用户的书店应用程序。假设用户可以选择订阅电子邮件通知以更改任何作者、书籍或出版商。为此,可以创建一个

notifications
表。此表希望与可遵循的任何对象具有多态关联。你将如何用STI以更干净的方式构建它?

显然,你不会把所有内容都放在一张表中。我认为你可能是对的,当所讨论的对象完全无关时,这是有意义的。但是,假设我们只是在谈论作者和出版商,你可以让他们都继承自“人”,或者其他什么,并避免多态关联。你甚至可以通过某种方式使用观察者,避免两者兼而有之。