1

我有一个多态模型Comments,我与几乎所有其他模型关联。我有评论索引页,我使用模型的标题,我称之为commentable多态关系和接口/抽象类/协议

确保commentable模型具有名为:title的方法或属性的最佳方法是什么?

在Objective-C中,我将定义一个协议,并在其他语言中定义一个抽象类或接口。我试图找出编写可维护的rails代码的最佳方法。

回答

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之类的东西?看看他们是否会这样做,如果是的话,那么你的行为。

+0

似乎是一种合理的方法。 – Cyrus 2012-02-25 04:03:12