问题标签 [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 投票
2 回答
444 浏览

sql - 单表继承还是两个表?

假设我有一个包含以下列(单词列表)的表:

现在,假设我想为每个“单词”翻译。什么是最好的?有第二张桌子吗?

还是都在同一张桌子上?

假设有两种情况,(1)我需要提取一个翻译后的词以及它翻译自的原始词,(2)我需要提取翻译后的词。在这两种情况下,我都会更频繁地使用“原始”词(SELECTingUPDATEing/INSERTing)。

那么,哪种方法最适合每种情况或一般情况?我倾向于第一种方法,因为那时我的“默认”选择不必由lang列限定。你怎么看?

谢谢!

0 投票
2 回答
1115 浏览

ruby-on-rails - 具有不同数据库表的 ActiveRecord 继承

我刚刚开始研究在 Rails 中使用更高级的模型。我经常使用的一个非常成功的模型是一个类访问多对多交叉引用关系的模型,该类本身是多对多关系中基类的子类。

这样,交叉引用类可以充当基类的替代品。

一个很好的例子是导航层次结构节点 (NavigationNode) 与用户角色交叉引用。在交叉引用点,一个类 (RoleNavigationNode) 可以从 NavigationNode 继承,并且仍然对用户角色有深入的了解。

我的问题是(在上述情况下)RoleNavigationNode 是否可以从 NavigationNode 继承,但可以访问交叉引用表,而不是 NavigationNode 访问的表——这当然是使用 ActiveRecord。

我没有研究多态关联,这可能更合适。

提前致谢...,

0 投票
2 回答
1782 浏览

ruby-on-rails - 在 Rails 中的常量上缓存模型实例的问题

我在我的一个模型上为 Rails 应用程序使用单表继承 (STI),并且在将模型对象存储在常量上时遇到问题。我已将问题隔离到一个示例项目中并将其提交到 GitHub:http: //github.com/fcoury/rails-sti-caching

我要做的是在初始化程序(在 Rails/config/initializers/目录中)上加载模型实例(在本例中为 Music 模型,通过 STI 从 Media 模型继承)并将其保持为常量:

我有一个示例控制器,它执行以下操作:

以及与之相伴的观点:

这段代码第一次运行时,<pre>标签上的输出是这样的:

但是,如果我只是重新加载页面,则会输出以下内容:

有谁知道这个错误背后的原因?

0 投票
1 回答
999 浏览

ruby-on-rails - 这是对 Rails 单表继承的合法使用吗?

我刚刚阅读了 Chad Fowler 关于20 Rails Development No-Nos的博客文章。关于单表继承,他评论道:

存储一个名为“type”的列,其中包含一个类名,这是一个很好的指标,表明正在发生一些可疑的事情。这很可疑,但并不总是很糟糕。不过,我认为,无论何时使用它,都应该不止一次地问自己这是否是正确的解决方案。当您有大量 STI 和多态关联时,数据库不会做它们最擅长的事情。

我正在编写一个博客应用程序,并且我正在考虑使用 STI 来对帖子进行评论,以及访问者可以发布的联系消息(如果他们想与我取得联系)。我的Message模型将继承自我的Comment模型。它们都有共同的属性,除了Message会有一个额外的subject字段。另一个共同点是两者都将提交给 Akismet 进行垃圾邮件检查。

与其像 Chad 建议的那样不止一次地问自己这是否是正确的解决方案,我还想从 Stack Overflow 专家那里得到一些意见!我的提议听起来是否适合 STI?

0 投票
2 回答
3516 浏览

ruby-on-rails - 与单表继承关联的 HABTM 关联

我有一个产品模型,它有很多部分,一个部分可以属于许多产品。

截面模型具有特征、标准和选项的子类。

我的模型是:

在我的产品控制器中,我可以这样做:

我希望能够像这样访问子类:

但它只是“未定义的方法'功能'”等错误。

请问谁能告诉我该怎么做?

0 投票
3 回答
1372 浏览

ruby-on-rails - 每个用户的多个角色的 Rails STI 样式继承

我一直在阅读 Rails 的一些 STI 继承示例,虽然它看起来适合我的需要(从用户的基类继承的用户角色/类型)。似乎它不能很好地处理具有多个角色的用户。特别是因为它依赖于数据库中的类型字段。

有没有快速简便的解决方法?

0 投票
1 回答
372 浏览

ruby-on-rails - 搜索逻辑 + STI

尝试实现使用与 STI 关联的搜索逻辑搜索,但我遇到了一个问题,即它没有选择 STI 记录作为子类而是父类。

例子:

当我搜索“艺术家代理公司喜欢”时,它基于代理作为用户而不是代理进行搜索:

select * from users WHERE users.company LIKE

而不是

select * from users AS agents WHERE agents.company LIKE

想知道我是否可以在 ActiveRecord 类级别预先解决这个问题(例如,在关联中,我想如果你可以指定代理将被加载 :as=>:agent 或类似的东西),或者我是否会需要修补 searchlogic 或我可以做些什么来完成这个。

我想到的另一个选项,我害怕这个想法,是在用户表上添加一个字段,其中包括个人机构的列表。例如 users.agencies => 机构一名称,机构二名称

0 投票
1 回答
308 浏览

ruby-on-rails - 属于准STI对象的多态对象:object_type不正确

考虑:

编辑:我在那里困惑了一段时间。这不是真正的 STI,它只是继承,就像Employee它自己的表一样。

谢谢!

0 投票
4 回答
7213 浏览

ruby-on-rails - STI 和 form_for 问题

我正在使用单表继承来管理不同类型的项目。

楷模:

从 projects_controller 编辑操作:

查看edit.html.erb:

projects_controller 的更新操作:

然后我在编辑视图上对 TechDesign 条目进行一些编辑并得到错误:

在参数中,很明显,我有 tech_design 参数,而不是项目参数名称:

如何解决?

0 投票
6 回答
3505 浏览

ruby-on-rails - Rails 单表继承问题

我正在尝试在我的 Rails 应用程序中为 User 模型及其子类 Member、Subscriber 和 Staff 设置单表继承。

我有每个模型文件:user.rb、member.rb 等

定义了用户模型:class User < ActiveRecord::Base; end; 我将其他模型子类化为:class Member < User; end;等等。

在我的用户表中,我有每个类需要的所有字段以及类型字段。现在,当我转到控制台并尝试创建说成员或订阅者的新实例时,我收到以下错误:

TypeError: can't dup NilClass from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2184:in 'dup' from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2184:in 'scoped_methods' from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2188:in 'current_scoped_methods' from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2171:in 'scoped?' from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2439:in 'send' from /Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/base.rb:2439:in 'initialize' from (irb):6:in 'new' from (irb):6

Rails 知道存在子类模型,因为在控制台中,当我简单地调用 Member 或 Subscriber 时,我会返回类定义。

我已经阅读了简单的文档,但我一定遗漏了什么?