问题标签 [sti]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - ruby-on-rails:创建具有单表继承的模型?
我的系统中有几个模型:
- 用户声誉
- 发表声誉
- 响应声誉
(类似于 SO)。
因此,他们共享一些基本代码:
- 递增和递减值
- 属于信誉所代表的三个对象(用户、帖子、响应)的 unique_id
如果有 C++,我会有一个名为“ Reputation
”的超类来封装这些概念。
目前,我有三个模型,分别定义但当我构建系统时,我开始意识到有很多代码重复等。
如果我要使用 STI,那么我将不得不使用owner_id
object_id 和owner_type
.
那么,处理这种情况的最佳方法是什么?
ruby-on-rails - 单表继承(Rails)的一对多关系问题
我对 ActiveRecord 中的 STI 和关系有疑问。我想我在类方法中遗漏了一些东西,但我不确定。下面是我的模型:
现在我想在某个用户下找到所有的 FreeAdvertisement,例如:
它给出了错误:
我可以使用 破解它u.advertisements.find :all, :conditions
,但这不是我想做的。请帮我解决这个问题。提前致谢。
ruby-on-rails - 这种 STI 结构可以在 Rails 中实现吗?
我想要这些模型:
我希望数据库表的名称是articles
而不是abstract_articles
。(按照惯例建议)
Rails 可以做到这一点吗?如何告诉我的基本模型使用不同的表?即使表名不符合约定,STI 仍然有效吗?
ruby-on-rails - ActiveRecord::Base#find 在单表继承 (STI) 中不返回记录
应用程序/模型
分贝/迁移
在脚本/控制台上...
好的,但是 Bmodel 在重新启动控制台后不返回任何记录,例如:
但是,它在访问 Cmodel 后可以工作:
Amodel 的工作原理如下:
有谁知道它为什么会这样工作?
Rails:2.3.4
Ruby:1.8.7
操作系统:Ubuntu 9.0.4
ruby-on-rails - Rails STI:调用子方法
我有这样的东西
所以当我创建对象时:
如何调用子方法(在这种情况下VideoReply::hello
)?
UPD: 我只能想象非常愚蠢的解决方案:
但这并不酷,我认为:)
ruby-on-rails - 多少课太多了?导轨 STI
我正在开发一个非常大的 Rails 应用程序。我们最初并没有使用太多继承,但我们从顾问那里获得了一些令人大开眼界的经验,并且正在寻求重构我们的一些模型。
我们的应用程序中有很多以下模式:
这也导致了视图、助手和 GraphSetting 模型本身中的大量条件。这些都不好。
一个简单的重构,我们摆脱了 GraphType 以支持使用更像这样的结构:
现在这对我来说非常有意义,简化了测试,删除了条件,并使以后的国际化更容易。然而,我们只有 15 到 30 个图表。
我们有一个非常相似的模型(以复杂的为例),大约有 100 种不同的“类型”,并且可能会翻倍。它们都有继承的关系和方法,有些需要覆盖比其他方法更多的方法。这似乎是完美的用途,但很多看起来就像很多。
200 个 STI 课程是不是很多?我们应该看看另一种模式吗?
感谢您的智慧,我会回答任何问题。
ruby-on-rails - Rails,我认为多态关联被高估、限制和不必要是错误的吗?
好的,所以我一直在玩弄关于 STI 和多态关联的 Rails 3 应用程序的不同组织方式。我试图找到一种既易于编码又易于使用的方法,并且最有可能与未来的任何更改兼容。在大量阅读了很多可选的(通常是缺乏且写得不好的)文章之后,我得出了自己的一些结论。
首先,似乎使用 STI 是最安全的选择,因为它易于编码、易于阅读和使用,并且易于处理未来的任何更改而无需过多重写。我能看到的唯一合法的缺点是,在您的数据库中,数据中会有“漏洞”。有些人认为这是一件坏事。但是,恕我直言,如果这是唯一的缺点,并且结果是让你的余生变得更轻松,那么谁在乎?
其次,多态关联似乎真的只在某些情况下才能很好地工作,绝对不是所有情况。此外,似乎在任何可以使用多态关联的情况下,您也可以只使用 STI(而不是相反)。那么,为什么还要为多态关联而烦恼呢?只是为了从您的数据库中清除那些讨厌的“漏洞”?但是随后您添加了看起来非常相似的重复字段和额外表,更不用说多组控制器、模型和视图等。
第三,即使您确实确定了使用多态关联的适当时间并正确实施它,事情可能会发生变化,您会发现自己不得不撕掉多态的东西并最终实现 STI。我没有看到反过来发生这种情况的时候。STI 似乎适用于任何设置,而多态关联似乎需要“恰到好处”才能像宣传的那样工作。
现在,我不是最聪明的人,所以这些可能是错误的和/或短视的观察 - 如果您认为我错了,请告诉我,并尝试提供一些好的证据来支持您的案例!
ruby - ActiveRecord STI 删除无法正常工作
我想使用活动记录存储两个模型,但删除没有按预期工作。
- 评估有 id、name 和 description
- 并且 SqlEvaluation 有另外两列 query_string 和 database。
我想用那两个表,eval_typ_id用来区分应该使用哪个子类:1代表SqlEvaluation。
经过一番研究,我使用了以下代码,除了“delete”之外它运行良好,它没有删除sql_eval中的行。我不知道哪里错了?
ruby-on-rails - 动态实例化 Rails 嵌套的 STI 子类?
假设我有一个像这样的课程:
其中“fruits”是 STI 基类,具有“apples”、“oranges”等子类......
我希望能够在 Basket 中有一个 setter 方法,例如:
但是,显然,我得到了一个例外,例如:
我想到的解决方法是这样的:
但这会导致 Fruit STI 对象在 Basket 类之前被实例化,因此 basket_id 键永远不会保存在 Fruit 子类中(因为 basket_id 尚不存在)。
我完全被难住了。有人有想法么?
ruby-on-rails - Rails:PolyMorphic 或 STI 或其他用于用户管理的东西?
我一直在用头撞墙,试图绕过这个,所以任何指导都将不胜感激......
我想要一个用户系统设置来反映以下层次结构:
我已经有一个User
带有Devise和CanCan设置的模型来处理身份验证和授权,所以我知道如何使用角色将用户类型限制为特定操作,等等。
我迷失的是如何在我的 Rails 代码和数据库中组织这些子类关系。正如您从上面看到的Agent
,Manager
、 和Administrator
都共享包含在 中的信息User
,但每个都有附加的功能和与之相关的信息。
如果我使用 STI,该User
表必须包含我的所有 [ Agent
/ Manager
/ Administrator
] 特定信息的字段,对吗?那会使我的User
桌子很大,这是我想避免的。相反,如果我使用多态,那么我是否不必User
在所有其他类型的User
子类表中复制所有公共信息?
为了增加我的困惑,我无法理解上述问题的答案如何与子类之间的关系一起工作(例如,Manager
has_many Agents
,但两者都是User
...的子类??)。
我真的很感谢有人通过详细的回答让我明白这一点,该回答适当考虑了代码的可读性和数据完整性,它简单地解释了(就像对 Rails 新手一样)为什么 A 是最好的方法以及为什么 B 或n是——通过比较——对于这种情况不是一个好方法,并且给出了实现上述关系的示例代码。我想解决这个问题,但更重要的是,我想了解这个解决方案为什么有效!