如何基于对象进行映射?

时间:2013-01-02 09:28:48

标签: ruby-on-rails ruby ruby-on-rails-3

我在@results中有两种对象(即@results = @videos + @artists)。

我正在尝试做,伪代码:

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

视频有标题栏,但艺术家没有。我该如何工作?

我可以进入每个循环,但寻找更好的方法来解决这个问题。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:-1)

@results.map{|x| 
  x.title if x.respond_to?('title')
  x.first_name if x.respond_to?('first_name')
}