问题标签 [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.

0 投票
1 回答
255 浏览

ruby-on-rails-3 - 使用 ActiveRecord::Association 方法,其中关联的“子”模型使用 STI

我有一个超类(模型)Measurement 和两个子类:WeightMeasurement 和 LengthMeasurement。

然后我得到了一个 Person 类,其中包含许多 WeightMeasurements 和 LengthMeasurements。

问题是在为 Person 创建新测量时,我想使用一个共享控制器来处理重量和长度测量。

但是,我通常建立一个人的测量值的方式是从父级(人)访问它们。就像 person.weight_measurement.build 一样。问题是我不知道该放什么... person..build ?

0 投票
1 回答
701 浏览

ruby-on-rails - 使用继承层次结构时在父控制器中呈现正确的操作 - Rails

我正在使用具有此单表继承层次结构的代码库:

BlogEntryWizardController < BlogEntriesController < CommonEntryController < ApplicationController

BlogEntryWizardController (BEWC) 使用与 BlogEntriesController (BEC) 相同的模型。BEWC 和 BEC 之间唯一真正的区别是视图(一个只是另一个的教程向导)。在向导中提交表单后,它会不断将用户带到 BEC(父级)的“显示”操作。这发生在 CommonEntryController (CEC) 中:

这会调用 BEC 的 show 方法,但我需要它来调用 BEWC 中被覆盖的 show 方法。有没有办法在 CE 中区分要适当调用的“显示”动作?

谢谢你的两分钱。

0 投票
1 回答
127 浏览

ruby-on-rails - RoR:如何在类是动态确定的控制器中创建一个对象?

我的应用有一个 STI 模型:

以及支持 STI 的架构:

MeteredService 是一个嵌套资源(尽管这与这个问题并不真正相关):

所以这里是交易:要创建一个 MeteredService,用户在下拉列表中选择它的许多子类之一。该表单将类名params['metered_services']['class']作为字符串返回给 MeteredServicesController#create in。现在我们需要创建正确的子类。

我正在采取的方法 - 有点 - 但我想知道这是否是最好的方法:

我正在做的是剥离类名,params['metered_service']这样我就可以使用剩余的参数来创建计量服务。并且 class_name 被解析为一个类(通过Object.const_get),所以我可以在它上面调用 .new 方法。

由于MeteredServices.descendants()在开发模式下完成缓存的方式,调用存在。它有效,但它真的很难看 - 请参阅这个问题以解释我为什么这样做。

有没有更好/更可靠的方法来做到这一点?

0 投票
1 回答
689 浏览

ruby-on-rails - Rails - 单表继承问题。任何解决方案/替代方案

对于我的项目管理应用程序,我目前正在使用单表继承,以便:

铅 < 要求

项目 < 要求

我的意思是说,领导是一项要求,项目是一项要求。没关系,虽然我只有这两个。然后我有另一个类似的东西(Tender),所以我创建了

招标 < 要求

现在的问题是,当投标转换为项目时,我无法确定哪些项目是投标,哪些是潜在客户。所以我不能说例如:

在 100 个潜在客户中,我得到 20 个项目,在 100 个投标中,我得到 5 个项目。

现在作为一种解决方法,我想我可以使用布尔字段来判断这是否是投标。但这违背了拥有 STI 的目的。是否有另一种方法可以使用 STI 本身来做到这一点。或者布尔值[或某种类别/项目类型字段]是完成此任务的唯一方法。

我可以为此使用 state_machine 吗?

一段时间以来,我一直在努力解决这个问题。任何帮助都会很棒。

0 投票
1 回答
352 浏览

ruby-on-rails-3 - Rails 3:我应该使用 STI 还是只是一个额外的列?(寻求建议)

我正在做一个项目(Rails 3.0.3),我认为我可能需要使用 STI,但我不确定是否应该在表中添加一个额外的列并完成它。

在我的对象模型中,(对于游戏系统)我有玩家(属于代理商)和所有者(拥有代理商)。

玩家和所有者都归代理所有,代理是一个用户帐户,因此代理可以是许多代理中的玩家和/或所有者。

我应该将代理命名为“用户”,哎呀。所以我有这个:

Player和Owner的属性完全相同,唯一不同的是Owner与Agency的关系与Player不同(Owner拥有Agency,Agency只有一个Owner,但有很多玩家)。

此外,所有者被赋予特殊权利,例如调整代理机构中的设置的能力。

从纯粹的 OOP 角度来看,Owner 是 Player 的子类(或者,Owner 和 Player 都是某些未定义类的子类,例如 Participant 或其他东西),但是考虑到持久性,拥有单独的 player 和 owner 表似乎是糟糕的数据库设计.

我的第一个想法是重构和使用 STI,或者让 Owner 成为 Player 的子类,或者引入一个新的基类,然后将 Owner 和 Player 子类化。

我的另一个想法是我可以向 Player 添加一个名为 is_owner 的 boolean/tinyint 列,但我可以预见这可能会导致一些讨厌的视图和控制器代码。

我想知道那里是否有人遇到过类似的情况,也许有任何建议或可以向我指出一些好的在线资源来阅读 STI?

0 投票
1 回答
284 浏览

ruby-on-rails-3 - Rails 3 中模型和控制器与 STI 的交互

我正在使用 rails 3 实现一个 Web 解决方案,其中用户有一个“操作”列表。它们可以是待处理的或验证的,并且只有管理员可以验证。

两个典型的动作是:

1/ 报告不正确的图片(如果管理员验证,则图片将被删除,因此我们需要其 id) 2/ 提交新类别(如果管理员验证,则将添加类别)

每个动作都有特定数量的点数,这些点数会影响用户的声誉,这使得它成为继承的良好候选者(验证结束时的共享行为、子项中的特定字段和方法实现)。

我计划在模型中使用“onValidate”方法,该方法可以删除图片(1/)或添加新类别(2/),但将其放入模型中感觉很奇怪。

您能否让我知道如何增强该设计并将其移动到控制器中?

0 投票
1 回答
5081 浏览

ruby-on-rails - 在 db fetch 之后对 activerecord 进行子类化并维护子类

我有一个 ActiveRecord 模型Media,它应该能够存储有关不同类型媒体(、、、)的类似结构Media::BookMedia::Movie信息Media::Music。然而,这些子类中的每一个都有独特的方法。

如果我使用这将起作用Media::Book.new("Harry Potter").reviews,但我希望能够使用

我知道我应该用它media_type来实现这一点,但我不确定是否有比覆盖每个 ActiveRecord 数据库接口方法(User.medias, find, find_by_etc, where, order, limit, all)并替换它们的每个返回值更好的方法。

0 投票
1 回答
125 浏览

ruby-on-rails - STI 什么时候有意义?我们为每种类型存储相同的信息,但使用方式不同

所以我知道 STI 是有史以来最受辱骂的事情,但我有一个例子,我认为它实际上可能有意义。我的应用程序正在解析一堆不同类型的 xml 文件。每个文件模型都存储完全相同的信息。只是一些关于它与什么用户关联、何时上传以及它在 S3 上存储位置的信息。

存储 xml 文件后,我会解析它以获取用于创建各种其他模型的信息。每种类型的文件都会创建不同的东西。可能有 100 个或更多不同类型的 xml 文件,尽管我不认为我会为那么多编写解析器。STI 在这种情况下有意义吗?

我猜的缺点是模型都在一个目录中,因此它将淹没该目录,除非破解 Rails 并将其粘贴在模型目录的子目录中。

另一种选择是我有一个 kind 字段并将一些东西放在处理所有这些的 lib 目录中。或者我正在使用 resque,也许每个 xml 文件解析器都应该是它自己的工作。这样做有一些缺点,比如在 Rails 控制台中强制工作有点尴尬。

0 投票
0 回答
134 浏览

ruby-on-rails - 在 to_xml 中包含子类

以下问题:我正在生成我的数据库模型的 xml 文档。通过 STI 继承。

我的模型:

要生成我调用的 XMLEntity.to_xml(:skip_instruct => true, :include => Entity.xml_includes)

在实体中self.includes看起来像这样:

这目前有效,但似乎只是一种解决方法,因为它Property必须与继承自的类具有相同的关系Property

我正在寻找的是一种算法,它查看当前属性是 aAttribute还是 aRelationship以及包含对应关系的 the 。

0 投票
1 回答
146 浏览

jquery - 客户端验证和 STI

我正在使用 client_side_validations gem。你如何建议让它与 STI 一起工作?

输出: