问题标签 [polymorphic-associations]

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 回答
1334 浏览

ruby-on-rails - Rails - 简洁地找到多态嵌套资源的父资源

假设我有一个像这样的多态结构。

那是相当丑陋的。每当我们添加一个它可能属于的新事物时,我们都需要将它 un-DRYly 添加到 before_filter 中。

它也变得更糟。假设 Foos真的是多态的东西,可以出现在任何地方,比如评论或标签。并假设您有以下路线:

...现在我们必须担心是先检查 bar_id 还是 baz_id。

对于更复杂的资源,这甚至可能不足以确保您获得父母的 ID。

如果我们可以做这样的事情,那将是理想的:

毕竟,我们的路由已经根据 URL 中参数的顺序对父级进行了编码。为什么要丢弃这些信息?

那么:如何做到这一点?

0 投票
2 回答
1518 浏览

ruby-on-rails - RESTfully 破坏 Rails 中的多态关联?

如何销毁关联本身并让对象单独关联,同时保持这个 RESTful?

具体来说,我有这些模型:

这就是说事件是:surveyableModelSurvey belongs_to Event)。我的问题是,无需创建ModelSurveysController,我如何销毁,而单独ModelSurvey留下Eventand ?Survey

有什么 map.resources :events, :has_many => :model_surveys?我不太确定在这种情况下该怎么做。路由需要做什么,控制器需要做什么?我希望网址看起来像这样:

/events/:title/model_surveys/:id

谢谢你的帮助,兰斯

0 投票
1 回答
742 浏览

ruby-on-rails - 具有多态关联的验证表单

class User < ActiveRecord::Base has_one :core, :as => :resource validates_presence_of :name end

为了插入一个新用户,我使用这样的表单:

当我在不插入电子邮件和姓名的情况下提交此表单时,rails 仅向我显示用户的错误。我也想在同一个列表中出现核心错误我该怎么办?

谢谢

0 投票
1 回答
2958 浏览

ruby-on-rails - Rails 中的继承和多态关联

我有一个用户模型,它属于Profile(belongs_to 多态)。一个模型有两个子类,但User中的profile_type始终对应于父模型。

然后:

即使在子类中声明关联,profile_type仍然是SomeProf

为什么会这样?有什么方法 profile_type 匹配子类而不是父类?

0 投票
0 回答
484 浏览

ruby-on-rails - 多态 has_many 通过控制器:反模式?

我很想说是的。

一个人为的例子,使用 has_many :through 和 polymorphs:

暂且不谈健身房是否是俱乐部的问题,或任何其他设计缺陷。

要将用户添加到俱乐部,很容易使用 RESTful 并将 person_id 和 club_id 发布到 MembersController,如下所示:

在这种情况下,当我们决定这样做时:

我们需要让 MembersController 决定父资源是 Club 还是 Gym,并采取相应的行动。一种非 DRY 解决方案:

如果你不止一次这样做,那就太可怕了。

此外,它基于加入俱乐部和加入健身房的概念大致相同。或者至少,Gym#add_member 和 Club#add_member 将以或多或少平行的方式运行。但我们必须假设健身房和俱乐部可能有不同的理由拒绝会员申请。MembersController 需要处理两个或多个错误状态的 flash 消息和重定向。

野外有解决方案。James Golick 很棒的 ResourceController 有一种处理 parent_type、parent_object 等的方法。Revolution On Rails 有一个很好的解决方案,可以通过向 ApplicationController 添加一些方法来干掉多个多态控制器。当然,ActionController 有 #polymorhpic_url 用于更简单的情况,例如 Blog#posts 和 Article#posts 等。

所有这一切让我想知道,是否真的值得将所有压力都施加在 MembersController 上?多态在 Rails 中处理得很好,但我的感觉是使用条件(if/unless/case)清楚地表明你不知道你正在处理什么类型。元编程会有所帮助,但前提是类型具有相似的行为。两者似乎都表明需要进行设计审查。

我很想听听你对此的看法。在这种情况下最好是干,还是确切地知道你有什么父类型?我在这里神经质吗?

0 投票
1 回答
2418 浏览

ruby-on-rails - 回形针多态关联与保存

我将我的 photo.rb 模型更改为多态并且可用于需要保存图像的各种其他模型,并且它工作正常,除了我无法弄清楚如何通过父模型正确保存新附件。有任何想法吗?我是否必须以不同的方式处理这个问题?因为,它也没有得到 imageable_type ......我必须添加。

我看到了看起来像野兽并使用另一个表的多态回形针插件?所以我希望有更好的解决方法。

我越来越:

松饼.rb

照片.rb

0 投票
5 回答
6828 浏览

ruby-on-rails - 在 Rails 中通过多态类型查找所有内容?

有没有办法在 Rails 中找到特定多态类型的所有多态模型?因此,如果我的 Group、Event 和 Project 都带有如下声明:

has_many :assignments, :as => :assignable

我可以做类似的事情:

Assignable.all

...或者

BuiltInRailsPolymorphicHelper.all("assignable")

那样就好了。

编辑:

...这样Assignable.all返回[Event, Group, Product](类数组)

0 投票
4 回答
4139 浏览

sql - SQL 条件/案例连接/多态关联?

我正在尝试实现类似于 Ruby on Rails 的多态关系的东西。我有以下三个表:

活动用户组织

事件可以由用户或组织拥有,因此我的事件表包括以下列:owner_type 和 owner_id。

我可以通过内部连接和 where 子句轻松列出属于用户或组织的所有事件,但是,有没有办法根据 owner_type 列的值使连接表有条件,从而允许将所有事件一起列出,无论所有者类型如何?

我希望这是有道理的。

任何建议表示赞赏。

谢谢。

0 投票
2 回答
579 浏览

ruby-on-rails - Rails 照片、用户、评论

这让我疯狂。我有 3 个模型。用户,照片,评论。

这就是我想要做的。

一个用户有很多照片和评论

一张照片属于一个用户,有很多评论

评论属于用户和照片

所以我的模型有这些关联:

用户

照片

评论

我现在想显示一张照片并加载这张照片的所有评论,并用用户信息显示每条评论。

所以在照片控制器显示我有的动作

在照片/显示视图中

它显示评论,例如。评论文本很好,但在部分内容中我尝试这样做:

它抛出错误“nil:NilClass 的未定义方法‘fname’”

奇怪的是,我是用户 authlogic,所以您必须登录才能发表评论。但是即使您没有登录,您也可以看到评论。当我注销时,它可以找到。当我登录时,它会引发错误。

任何帮助将不胜感激,因为它让我发疯。

顺便说一句,在我的路线中,我有

谢谢

0 投票
1 回答
373 浏览

ruby-on-rails - 在多态关系中缓存列

我有一个内容管理系统应用程序,它使用多态树表作为其排列的核心。我遇到了一个问题,一旦树变得很大,并且因为我们有很多不同的模块(大约 25 个),只做 :include => :instance 并不能减少芥末。Instance 是我们多态关系的名称。

有趣的是,在大多数情况下,当我想要这些项目的大列表时,我真正想要的只是关联表中的名称(例如,出于索引栏的目的),其余的都在中央表中。所以我想我可能应该为中央表中的名称实现某种列缓存。(就像 rails 已经做的计数器缓存一样)。

我只是想知道是否存在插件来管理这个?

如果没有,我只是要在中央表中添加一个“名称”列,因为所有多态模型都继承了一个超类,所以只需添加一个回调,在创建或更新项目时将名称推送到中央表。然后我会先进行一次大迁移来填充它?

该设计有任何缺陷吗?

我想更灵活的列可以是某种序列化缓存,如果需要,我可以稍后存储其他东西?呸!:D