0

@results(つまり)には 2 種類のオブジェクトがあります@results = @videos + @artists

私がやろうとしている、疑似コード:

@results.map(&:title || &:first_name)

ビデオにはタイトル列がありますが、アーティストにはありません。どうすればこれを機能させることができますか?

各ループに入ることができましたが、これについてもっと良い方法を探しています。

4

2 に答える 2

2

適切なメソッドを見つけようとする代わりに、どこからでも呼び出すことができる共通のインターフェイスを作成します。

例(「名前」という方法を使用していますが、別の名前を選択できます):

Video クラスには、次のような「name」メソッドがあります。

class Video
  def name
    self.title
  end
end

Artist クラスでも同じことを行いますが、"first_name" メソッドを使用します。

class Artist
  def name
    self.first_name
  end
end

それらは、マップ ブロックで同じメソッド (名前) を使用できます。

@results.map(&:name)
于 2013-01-02T13:29:06.517 に答える
-1
@results.map{|x| 
  x.title if x.respond_to?('title')
  x.first_name if x.respond_to?('first_name')
}
于 2013-01-02T09:32:16.393 に答える