0

@results我在(即@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 回答