1
我有一个多态模型Comments
,我与几乎所有其他模型关联。我有评论索引页,我使用模型的标题,我称之为commentable
。多态关系和接口/抽象类/协议
确保commentable
模型具有名为:title
的方法或属性的最佳方法是什么?
在Objective-C中,我将定义一个协议,并在其他语言中定义一个抽象类或接口。我试图找出编写可维护的rails代码的最佳方法。
我有一个多态模型Comments
,我与几乎所有其他模型关联。我有评论索引页,我使用模型的标题,我称之为commentable
。多态关系和接口/抽象类/协议
确保commentable
模型具有名为:title
的方法或属性的最佳方法是什么?
在Objective-C中,我将定义一个协议,并在其他语言中定义一个抽象类或接口。我试图找出编写可维护的rails代码的最佳方法。
我会在评论模型上写一个方法来为你做这件事。因此,在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之类的东西?看看他们是否会这样做,如果是的话,那么你的行为。
似乎是一种合理的方法。 – Cyrus 2012-02-25 04:03:12