2009-11-15 74 views
1

我有一个AudioFile has_many照片。一张照片有一个属性“主”(分贝为0或1)什么是这样做的惯用ruby方式:我想在AudioFile上有一个方法,它返回主照片的ID,即照片主属性设置为true。迭代集合并返回匹配元素

回答

1

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

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

然后,您可以调用您的照片关联的主要范围。例如

@audio_file.photos.primary.first 

你也可以用辅助方法包装这个。

def primary_photo 
    photos.primary.first 
end 

查看http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html了解更多详细信息和示例或谷歌named_scope。

1

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

+1

所以我可以写 def primary_photo self.photos.select {| element | element.primary ='true'} end – rordude 2009-11-15 23:55:05