0

我对 Rails 还很陌生,我遇到了一个场景,我无法以“正确的方式”解决问题。

假设我有几个模型:

  • 评论
  • 文章
  • 照片
  • 视频

可以对文章、照片、视频和其他评论(作为回复)进行评论。更一般地,可以对任何对象进行评论。

我需要的是能够调用评论所针对的对象的方法(不知道该对象是什么)。

我目前的策略是依赖鸭子类型并简单地定义一个非正式的“协议”来访问我需要的属性。

在我的 Comment 类中,我有一个方法commentable_object可以返回被评论的内容(照片、视频、文章或评论)。然后在此commentable_object我调用两种方法:notification_usernotification_object. commetable_object 负责实现notification_usernotification_object返回适当的东西。

在此处输入图像描述

这些方法的细节并不重要,重要的是我的 Comment 类需要从某个类(可以是任何类)请求特定的数据。

问题是我不希望所有这些不同的类都知道 Comment 类。现在我依靠鸭子打字并简单地检查这些对象的respond_to。Article、Photo 和 Video 实现 Comment 类所需的方法时感觉很奇怪,而实际上他们不应该对此一无所知。是否有更好的地方来实现这些方法?

在 Rails 中实现这个的最优雅的方法是什么?

更新

为了更清楚一点,我不是在寻找对这些对象之间的关系进行建模的方法。我的问题实际上是关于如何干净地定义两个对象之间使用的“接口”,但没有这两个对象相互了解。

4

1 回答 1

2

在rails中它被称为多态关联看到这个,它可能会有所帮助:

http://railscasts.com/episodes/154-polymorphic-association

于 2013-06-09T19:55:55.133 回答