如果这是一个基本问题,请原谅我;我正在学习Rails(使用3.2)。
我的Event
模型has_many
images
。每个图像都有一个is_primary
布尔字段。 Event
应该有一个cover_image
方法,该方法会将is_primary
设置为true的图像返回,否则返回第一个图像。这是我的代码:
def cover_image
imgs = self.images
imgs.each { |i| return i if i.is_primary }
# If no primary
return imgs.first
end
我不禁感觉有一种更好的方法,一种不涉及循环遍历所有元素只是为了找到一种。
答案 0 :(得分:4)
您可以非常轻松地使用范围执行此操作:
图片模型
scope :primary, where(:is_primary => true)
活动模型
def cover_image
images.primary.first
end
这是一个非常基本的例子,至少应该让你开始,例如,你需要在它的基础上优雅地处理丢失的主图像。
为了完整性,你没有有作为范围执行此操作,如果您愿意,可以直接使用where语句。范围对于保持DRY非常好:
活动模型
def cover_image
images.where(:is_primary => true).first
end