我对rails非常陌生,我遇到了一个我无法解决“正确方法”的场景。
假设我有几个型号:
可以对文章,照片,视频和其他评论(作为回复)发表评论。更一般地说,可以对任何对象进行评论。
我需要的是能够在对象上调用方法(不知道该对象是什么)。
我目前的策略是依靠鸭子打字,只需定义一个非正式的“协议”来访问我需要的属性。
在我的Comment类中,我有一个方法commentable_object
,它返回被评论的内容(照片,视频,文章或评论)。然后在此commentable_object
上,我调用了两种方法:notification_user
和notification_object
。 commetable_object负责实施notification_user
和notification_object
并返回适当的内容。
这些方法的细节并不重要,重要的是我的Comment类需要从某些类(可以是任何类)请求特定数据。
问题是我不希望所有这些不同的类都知道Comment类。现在我依靠鸭子打字,只需检查这些对象的respond_to。文章,照片和视频实现评论类所需的方法时,实际上他们不应该对它有任何了解,这感觉很奇怪。是否有更好的地方来实施这些方法?
在rails中实现此功能最优雅的方式是什么?
更新
为了更清楚一点,我不是在寻找模拟这些对象之间关系的方法。我的问题实际上是关于如何干净地定义两个对象之间使用的“接口”,但没有这两个对象相互了解。
答案 0 :(得分:2)
在rails中它被称为多态关联看到这一点,它可能会有所帮助: