迭代集合并返回匹配元素

时间:2009-11-15 23:44:36

标签: ruby-on-rails

我有一张有很多照片的AudioFile。照片有一个属性“primary”(db中为0或1)什么是惯用的ruby方式做这样的事情:我想在AudioFile上有一个方法,它返回主照片的id,即有照片的照片主要属性设置为true。

2 个答案:

答案 0 :(得分:1)

我不确定这是不是你的意思,但是Enumerable#Select会给你一个与一个案例匹配的可枚举对象中的所有项目(在一个块中给出)。

答案 1 :(得分:1)

通常,最佳做法是在named_scope模型中设置Photo

class Photo < ActiveRecord::Base
  named_scope :primary, :conditions => {:primary => true}
end

然后,您可以调用照片关联中的主要范围。 e.g。

@audio_file.photos.primary.first

您也可以将其包装在辅助方法中。

def primary_photo
  photos.primary.first
end

有关详细信息和示例,请参阅http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html或google named_scope。