rails中两个不相关的类之间的通信?

时间:2013-06-09 19:49:46

标签: ruby-on-rails oop

我对rails非常陌生,我遇到了一个我无法解决“正确方法”的场景。

假设我有几个型号:

  • 注释
  • 文章
  • 照片
  • 视频

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

我需要的是能够在对象上调用方法(不知道该对象是什么)。

我目前的策略是依靠鸭子打字,只需定义一个非正式的“协议”来访问我需要的属性。

在我的Comment类中,我有一个方法commentable_object,它返回被评论的内容(照片,视频,文章或评论)。然后在此commentable_object上,我调用了两种方法:notification_usernotification_object。 commetable_object负责实施notification_usernotification_object并返回适当的内容。

enter image description here

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

问题是我不希望所有这些不同的类都知道Comment类。现在我依靠鸭子打字,只需检查这些对象的respond_to。文章,照片和视频实现评论类所需的方法时,实际上他们不应该对它有任何了解,这感觉很奇怪。是否有更好的地方来实施这些方法?

在rails中实现此功能最优雅的方式是什么?

更新

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

1 个答案:

答案 0 :(得分:2)

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

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