问题标签 [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-3 - 使用 ActiveRecord::Association 方法,其中关联的“子”模型使用 STI
我有一个超类(模型)Measurement 和两个子类:WeightMeasurement 和 LengthMeasurement。
然后我得到了一个 Person 类,其中包含许多 WeightMeasurements 和 LengthMeasurements。
问题是在为 Person 创建新测量时,我想使用一个共享控制器来处理重量和长度测量。
但是,我通常建立一个人的测量值的方式是从父级(人)访问它们。就像 person.weight_measurement.build 一样。问题是我不知道该放什么... person..build ?
ruby-on-rails - 使用继承层次结构时在父控制器中呈现正确的操作 - Rails
我正在使用具有此单表继承层次结构的代码库:
BlogEntryWizardController < BlogEntriesController < CommonEntryController < ApplicationController
BlogEntryWizardController (BEWC) 使用与 BlogEntriesController (BEC) 相同的模型。BEWC 和 BEC 之间唯一真正的区别是视图(一个只是另一个的教程向导)。在向导中提交表单后,它会不断将用户带到 BEC(父级)的“显示”操作。这发生在 CommonEntryController (CEC) 中:
这会调用 BEC 的 show 方法,但我需要它来调用 BEWC 中被覆盖的 show 方法。有没有办法在 CE 中区分要适当调用的“显示”动作?
谢谢你的两分钱。
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()
在开发模式下完成缓存的方式,调用存在。它有效,但它真的很难看 - 请参阅这个问题以解释我为什么这样做。
有没有更好/更可靠的方法来做到这一点?
ruby-on-rails - Rails - 单表继承问题。任何解决方案/替代方案
对于我的项目管理应用程序,我目前正在使用单表继承,以便:
铅 < 要求
项目 < 要求
我的意思是说,领导是一项要求,项目是一项要求。没关系,虽然我只有这两个。然后我有另一个类似的东西(Tender),所以我创建了
招标 < 要求
现在的问题是,当投标转换为项目时,我无法确定哪些项目是投标,哪些是潜在客户。所以我不能说例如:
在 100 个潜在客户中,我得到 20 个项目,在 100 个投标中,我得到 5 个项目。
现在作为一种解决方法,我想我可以使用布尔字段来判断这是否是投标。但这违背了拥有 STI 的目的。是否有另一种方法可以使用 STI 本身来做到这一点。或者布尔值[或某种类别/项目类型字段]是完成此任务的唯一方法。
我可以为此使用 state_machine 吗?
一段时间以来,我一直在努力解决这个问题。任何帮助都会很棒。
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?
ruby-on-rails-3 - Rails 3 中模型和控制器与 STI 的交互
我正在使用 rails 3 实现一个 Web 解决方案,其中用户有一个“操作”列表。它们可以是待处理的或验证的,并且只有管理员可以验证。
两个典型的动作是:
1/ 报告不正确的图片(如果管理员验证,则图片将被删除,因此我们需要其 id) 2/ 提交新类别(如果管理员验证,则将添加类别)
每个动作都有特定数量的点数,这些点数会影响用户的声誉,这使得它成为继承的良好候选者(验证结束时的共享行为、子项中的特定字段和方法实现)。
我计划在模型中使用“onValidate”方法,该方法可以删除图片(1/)或添加新类别(2/),但将其放入模型中感觉很奇怪。
您能否让我知道如何增强该设计并将其移动到控制器中?
ruby-on-rails - 在 db fetch 之后对 activerecord 进行子类化并维护子类
我有一个 ActiveRecord 模型Media
,它应该能够存储有关不同类型媒体(、、、)的类似结构Media::Book
化Media::Movie
信息Media::Music
。然而,这些子类中的每一个都有独特的方法。
如果我使用这将起作用Media::Book.new("Harry Potter").reviews
,但我希望能够使用
和
我知道我应该用它media_type
来实现这一点,但我不确定是否有比覆盖每个 ActiveRecord 数据库接口方法(User.medias
, find
, find_by_etc
, where
, order
, limit
, all
)并替换它们的每个返回值更好的方法。
ruby-on-rails - STI 什么时候有意义?我们为每种类型存储相同的信息,但使用方式不同
所以我知道 STI 是有史以来最受辱骂的事情,但我有一个例子,我认为它实际上可能有意义。我的应用程序正在解析一堆不同类型的 xml 文件。每个文件模型都存储完全相同的信息。只是一些关于它与什么用户关联、何时上传以及它在 S3 上存储位置的信息。
存储 xml 文件后,我会解析它以获取用于创建各种其他模型的信息。每种类型的文件都会创建不同的东西。可能有 100 个或更多不同类型的 xml 文件,尽管我不认为我会为那么多编写解析器。STI 在这种情况下有意义吗?
我猜的缺点是模型都在一个目录中,因此它将淹没该目录,除非破解 Rails 并将其粘贴在模型目录的子目录中。
另一种选择是我有一个 kind 字段并将一些东西放在处理所有这些的 lib 目录中。或者我正在使用 resque,也许每个 xml 文件解析器都应该是它自己的工作。这样做有一些缺点,比如在 Rails 控制台中强制工作有点尴尬。
ruby-on-rails - 在 to_xml 中包含子类
以下问题:我正在生成我的数据库模型的 xml 文档。通过 STI 继承。
我的模型:
要生成我调用的 XMLEntity.to_xml(:skip_instruct => true, :include => Entity.xml_includes)
在实体中self.includes
看起来像这样:
这目前有效,但似乎只是一种解决方法,因为它Property
必须与继承自的类具有相同的关系Property
。
我正在寻找的是一种算法,它查看当前属性是 aAttribute
还是 aRelationship
以及包含对应关系的 the 。
jquery - 客户端验证和 STI
我正在使用 client_side_validations gem。你如何建议让它与 STI 一起工作?
输出: