Rails更好地从has_many关联获取逐个字段的方法

时间:2013-06-17 19:07:02

标签: ruby-on-rails activerecord

如果这是一个基本问题,请原谅我;我正在学习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

我不禁感觉有一种更好的方法,一种不涉及循环遍历所有元素只是为了找到一种。

1 个答案:

答案 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