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

ruby-on-rails - Rails STI 和视图重用

我有一个 STI 模型,并希望为派生模型重用基本视图。例如,如果我有 Teacher < Person,我希望 Teacher 的视图包含人员的视图字段。

有没有办法做到这一点?

0 投票
1 回答
136 浏览

ruby-on-rails - STI:用户有多个子类 id。(我希望用户只有一个子类 id)

我正在尝试使用 STI,因为我想对设备使用单点登录页面。我想将其中一个teacher_id或分配student_id给一个user,但事实证明所有的user都有。我该如何解决这个问题?以下是模型和迁移。

0 投票
4 回答
1246 浏览

ruby-on-rails - 使用祖先数据模型规划路线和控制器的轨道半复杂 STI

我正在尝试找出针对特定用例管理我的控制器和模型的最佳方法。

我正在构建一个评论系统,其中用户可以使用多态可评论来构建几种不同类型的评论。

我也想知道增加更多的复杂性。我还想偶尔包括细分……例如,对于美国,我可能会添加德克萨斯或德国、巴维利亚,并且也可以对其进行审查,但并非每个国家/地区都有地区,甚至那些可能永远不会被审查的地区。所以一点都不严格。我希望它尽可能简单和灵活。

如果用户可以在一个表单上登陆并选择一个城市或一个国家,然后使用来自 Foursquare 的数据向下钻取以找到一个城市中的特定位置并进行评论,那就太好了。

我真的不确定我应该走哪条路?例如,如果我有一个国家和一个城市……然后我决定添加一个洞穴会发生什么?

我可以给地方标签(即威廉斯堡,布鲁克林)belong_to NY City 并且标签属于 NY 吗?

标签更灵活,可以选择性地解释它们可能在哪些区域,标签属于一个城市,但也有地点并且可以审查?

所以我正在为任何做过相关事情的人寻找建议。

使用 Rails 3.2 和 mongoid。

0 投票
1 回答
1921 浏览

ruby-on-rails - 对多个表使用单个模型

我想知道是否可以组合来自不同表的列并将其用作 Rails 中的一个模型。我在下面有两个表,一个包含通用列和其他专门列。

在 Rails 模型中,

在保存作业模型时,应将列保存在相应的表中。我考虑过使用单表继承 (STI),但看起来我无法使用这种方法拆分多个表中的列。

0 投票
3 回答
1660 浏览

ruby-on-rails - 在 Rails 应用程序之外以正确的顺序加载 ActiveRecord 模型

如何在 rails 应用程序之外以正确的顺序加载/要求我的 activerecord 模型。我有许多 STI 模型,但我得到一个未初始化的常量异常。

我有很多工作需要使用 resque 运行,我不想每次都加载我的 rails 应用程序并部署到所有工作机器

编辑:还有一点要澄清。有两个项目一个 Rails 项目和一个包含我的模型的 Rails 引擎项目。我不使用我的 resque 作业加载 rails 引擎本身,我只是在一个单独的类中使用上面的代码片段来加载模型上的活动记录。这一直有效,直到我添加了一些 STI 模型,由于命名导致子项尝试在父项之前加载。rails 引擎项目在 rails 项目中加载得很好,没有问题,这只是因为我试图在 rails 项目之外使用活动记录。

0 投票
3 回答
1054 浏览

ruby-on-rails-3 - Rails 3 通过 mongoid 适配器使用 MongoDB - 有没有办法在不使用单表继承的情况下共享属性规范?

可能是一个令人困惑的标题,但不知道该怎么说。示例应该更清楚。我有许多不同的模型,它们具有许多相同的属性。因此,在每个模型中,我必须指定那些相同的属性,然后指定特定于该特定模型的属性。

有什么方法可以创建一些列出这些基本属性的类,然后从该类继承而不使用单表继承?因为如果我将所有共享属性和 Mongoid 包含到单个模型中并从其他模型中的该基本模型继承,那么 STI 将被强制执行,并且我的所有模型都存储在单个 mongodb 集合中,由“_type”字段区分。

这就是我所拥有的:

但这是我追求的功能:

问题是,如果 Base_model 中没有“include Mongoid::Document”,则该基本模型不知道“field ...”功能。但是,如果您确实将 mongoid 包含在基本模型中并从它继承,则会强制执行 STI。

我不能针对这种特殊情况进行 STI,但是拥有多个模型是一场编码噩梦,所有模型都一遍又一遍地指定相同的属性列表(模型数量越来越多,每个共享大约 15-20 个属性,所以任何时候我必须更改模型名称,到处更改它需要付出很多努力......)。

0 投票
1 回答
256 浏览

ruby-on-rails-3 - 使用单表继承时是否可以访问父类(而不是子类)?

我有一个 Post 类,包含 TextPost、ImagePost 和 LinkPost 子类(使用 STI)。这些 Post 类型被指定为字符串Post.type(根据 STI 约定)。

我可以打电话给TextPost.all, ImagePost.all,LinkPost.all就可以了。

我以为我仍然可以打电话Post.all,但我收到以下错误:

作为参考,这是我的 schema.rb 的相关部分:

还有我的子类(每个子类都在自己适当命名的 .rb 文件中):

难道我做错了什么?还是在使用 STI 时无法(简单而简洁地)调用父类?

0 投票
2 回答
4983 浏览

ruby-on-rails - 声明 Rails 模型子类的静态属性

我是 Ruby 和 Rails 的新手(和编程!),并试图找出将属性从模型传递给它的 STI 子代的惯用方式。

我有一个通用模型“文档”,以及一些从它继承的模型——让我们以“教程”为例。我有一个“图标”的字符串字段,我想在其中存储图标的文件名而不是完整路径(我认为路径应该取决于每个模型,因为它是检索记录数据的细节?):

这是我想对子类做的事情,所以他们在适当的地方寻找他们的“图标”(或任何其他资产)。

我已经阅读了类变量并理解为什么我上面写的内容没有像我预期的那样工作,但是在教程类中覆盖“asset_path”的最佳方法是什么?我认为我不应该使用实例变量,因为值不需要更改每个模型实例。任何想法都非常感谢(即使这意味着重新考虑它!)

0 投票
2 回答
220 浏览

ruby - 为什么 Rails 生成器不为特定模型创建属性和方法?

我的应用程序中有两个使用 STI 的模型:Entry 和 Sugar,它们非常简单。

参赛作品:

糖(请注意注释宝石中缺少amount架构信息):

我通过运行创建了 Sugar 模型rails g model Sugar amount:integer,然后将其编辑为 Entry 模型的子类。生成的迁移创建了一个金额列:

该列存在于我的数据库中:

但是,“数量”属性和/或方法似乎不存在。这是一个例子:

为什么不提供amount属性和相关方法?

0 投票
1 回答
556 浏览

ruby-on-rails - 使用 STI model_name 解决方法的弃用警告

在我的单表继承模型中,我重写了inherited基础模型中的方法,以便所有后代模型都可以通过基础模型的名称来识别。以下代码用于为所有继承类添加对 model_name 方法的覆盖。

我注意到这会在 Rails 3.2.3 中产生弃用警告:

我可以使用另一种方法来解决 model_name 问题吗?