问题标签 [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 回答
882 浏览

ruby-on-rails - 设计 STI 与 MTI 与单独的表格

我有一个使用设计进行身份验证的 rails 3.1 项目。

我有几种用户类型,每一种都在数据库中使用非常不同的字段。我对每个模型都有不同的模型,但是模型之间有足够的重叠功能,例如消息传递,因此拥有一个模型是有意义的。在处理不同类型用户之间的消息传递时,这尤其是一个问题。

我应该将它们全部保留为单独的表还是将它们移动到单个表中?考虑到我们将一直在查找用户这一事实,多表继承确实没有多大意义。加入明智的做法简直太昂贵了。

将每个用户类型的所有未使用列都放在表中,感觉真的很脏。

想法?

0 投票
1 回答
76 浏览

ruby-on-rails - 帖子模型和控制器架构

我正在尝试开发一个简单的网站,让用户可以添加帖子并在一个聚合流中查看它们。

问题是我有两种“类型”的帖子,“消息”帖子和“链接”帖子。

所有帖子都必须有消息,并且帖子可以有链接。

如果帖子有链接,它必须是唯一的,因此您不能添加带有已经提交的链接的帖子(由您或其他用户)。

因此,如果用户使用提供的链接 URL 添加帖子,我需要对链接进行验证,例如:

  • 这是一个链接吗?
  • 这个链接是新的(不在数据库中)?
  • 这是一个有效的链接(就像域存在并且服务器响应足够(400,301,...)

现在,对于所有看起来像这样的帖子(有链接和没有链接),我只使用一个模型:

我看到的问题是我无法将模型验证应用于链接(无法检查唯一性或格式),因为它可以为 NULL,所以我在 post_controller 中应用所有验证,如下所示:

如何以正确的方式做到这一点?我收到了使用 STI 的建议,但我真的不知道如何以正确的方式进行操作以及如何应用验证。如果您知道有关使用 STI 和验证的良好资源,请给我一个链接。

0 投票
3 回答
380 浏览

ruby-on-rails - 使用 STI 的 Rails 应用程序——提取这些记录的最简单方法?

我正在学习如何使用 Rails,并且正在开发一个示例应用程序来跟踪啤酒配方。

我有一个名为 Recipe 的模型,其中包含配方名称和效率。

我有一个使用 STI 的名为 Ingredient 的模型——它被细分为 Malt、Hop 和 Yeast。

最后,为了链接食谱和配料,我使用了一个名为 rec_items 的连接表,其中包含食谱 ID、配料 ID 和特定于该食谱/配料组合的信息,例如数量和煮沸时间。

一切似乎都运行良好 - 我可以使用 Malt.all 找到我所有的麦芽,使用 Ingredient.all 找到所有成分。我可以使用@recipe.ingredients 等找到食谱的成分...

但是,我现在正在处理我的食谱的显示视图,并且对完成以下操作的最佳方法感到困惑:

我想显示配方名称和相关信息,然后列出成分,但按成分类型分隔。所以,如果我有一个黑色 IPA @ 85% 的效率,它有 5 种麦芽和 3 种啤酒花品种,输出将类似于:

现在,我可以拉出@recipe.rec_items 并遍历它们,测试每个rec_item.ingredient 的type == "Malt",然后对啤酒花做同样的事情,但这似乎不是Rails-y,也不是很有效率。那么最好的方法是什么?我可以使用@recipe.ingredients.all 提取所有成分,但不能使用@recipe.malts.all 或@recipe.hops.all 提取这些类型。

我应该使用不同的语法吗?我应该使用@recipe.ingredient.find_by_type("Malt") 吗?在控制器中执行此操作并将集合传递给视图,还是在视图中正确执行?我是否还需要在我的 Hop 和 Malt 模型中指定 has_many 关系?

我可以使用条件语句或 find_by_type 让它按照我想要的方式工作,但我的重点是用尽可能少的 DB 开销来执行这种“Rails 方式”。

谢谢您的帮助!

当前的基本代码:

食谱.rb

成分.rb

麦芽糖.rb

Hop.rb

RecItem.rb

recipes_controller.rb

更新添加

我现在无法访问连接表属性,所以我发布了一个新问题:

Rails - 使用 group_by 和 has_many :through 并尝试访问连接表属性

如果有人可以提供帮助,我将不胜感激!!

0 投票
0 回答
1099 浏览

ruby-on-rails-3.1 - 活动管理员和 STI 模型错误:找不到表“类别”

更新#1:解决了!不知何故,Pow 没有重新启动它的进程,所以在更新后它正在加载旧的配置文件。它正在加载错误的语言环境文件。

我删除了我最近安装的 gem(仅来自 Gemfile)并重新启动了 Pow。然后我将宝石一一添加回 Gemfile。以及 ActiveAdmin 和 Rails 本地化开始正常工作。

原始问题:

我正在尝试设置 ActiveAdmin 以支持我的分类法。我的设置如下:

所以现在我在 ActiveAdmin 中添加了以下内容:

它返回对开错误:

我的迁移肯定已经运行了。我在taxonomies表中有一些有效的 STI 记录。那么有什么问题呢?

0 投票
2 回答
621 浏览

ruby-on-rails - 设计和 STI 如何在注册时作为基类登录

我已经看过类似的帖子,但无法完全得到我需要的答案。

我有一个用户模型并使用 STI 一个学生模型,它是一种用户。

当我创建一个新学生时,Devise 使用 student_session 登录该学生。问题是我的应用程序的其余部分使用了 user_session。那么,我应该使用 student_session 创建一个新的 user_session 吗?然后注销学生?

或者有没有办法让设计允许学生创建,但作为用户基础模型登录?

谢谢你,安东尼

0 投票
0 回答
287 浏览

polymorphism - 在 mongoid 中使用多态性时是否可以使用单表继承 (STI)?

在 ActiveRecord 中使用 STI 和多态性时,需要执行以下操作以确保

将正常工作:

有没有人在 Mongoid 上成功使用过 STI 和多态性?

0 投票
2 回答
1506 浏览

activerecord - ActiveRecord STI:如何突破父类的默认范围

在 Rails 3.1 RC6 上,给定

以下不按预期工作:

生成的 SQL 语句如下所示:

如何完全覆盖父类的默认范围?

我还尝试了以下这些都不起作用:

0 投票
1 回答
587 浏览

ruby-on-rails - 元搜索 has_many,其中 all/none 必须匹配

我试图进行元搜索,或者一个范围,它给我所有没有任何has_many-association等于type ==“Something”的对象。

例子:

通过自定义范围轻松搜索具有发票的订单:

或元搜索:

现在我该如何做相反的事情,找到没有发票的订单?(OrderAcknowledgements 应该总是被允许的)

0 投票
2 回答
9090 浏览

ruby-on-rails - Rails 问题:belongs_to 与 STI——我该如何正确地做到这一点?

我一直在玩弄 STI 和 belongs_to / has_many 关系,我有点困惑。

基于类似于以下的模型配置,我有几个问题:

  1. 应该Baby属于什么?
  2. 在迁移方面,我应该为babies表上的外键命名/添加什么?
  3. 我很难研究这个,是否有明确的来源可以解释这一点?API 文档似乎没有击中它,或者我错过了它(这是完全可能的)。

我的第一个想法是添加一个parental_id类似babies的方法Baby#owner,执行以下操作:

  • 击中self.parental
  • 确定父母的类型
  • 返回正确的父母类型(可能是母亲,也可能是父亲)

谢谢!

0 投票
3 回答
1807 浏览

ruby-on-rails - Rails 2.3 STI 返回所有子类

我正在使用标准 STI,并希望在其选项都是父类的子类型的表单上创建一个输入选择。所以我希望 Parent.select_options 返回 ['Child1','Child2','Child3']

视图.html.haml

更新

感谢@nash 和@jdeseno 只需要使用@jdeseno 方法添加以下初始化程序: