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