1

私はほとんどすべての他のモデルと関連付ける多形モデルCommentsを持っています。私はcommentableと呼ぶモデルのタイトルを使用するコメントインデックスページを持っています。ポリモーフィックな関係とインターフェイス/抽象クラス/プロトコル

commentableモデルのメソッドまたは属性が:titleであることを確認する最良の方法は何ですか?

Objective-Cではプロトコルを定義し、他の言語では抽象クラスまたはインタフェースを定義します。私は、保守可能なレールコードを書くための最良の方法を理解しようとしています。

答えて

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

関連する問題