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