我有一个多态模型Comments
,我几乎与其他所有模型相关联。我有评论索引页面,我使用模型的标题,我称之为commentable
。
确保commentable
模型具有名为:title
的方法或属性的最佳方法是什么?
在Objective-C中,我将定义一个协议,在其他语言中,我将定义一个抽象类或接口。我正在试图找出编写可维护的rails代码的最佳方法。
答案 0 :(得分:1)
我会在评论模型上编写一个方法来为您完成此操作。所以在comments.rb中:
def title
self.commentable.title if self.commentable.respond_to?(:title)
end
在您的视图中,您可以检查评论是否有标题并进行渲染,或者只是跳过渲染:
<% if @commentable.title %>
<h2><%= @commentable.title %></h2>
<% end %>
它不完全是一个协议或接口,但在Ruby中,你不能轻易地强制对象以某种方式起作用。你使用像respond_to这样的东西?看看他们是否这样做,如果是,那么你就行动了。