【发布时间】:2014-07-12 11:55:33
【问题描述】:
在带有 MySQL 的 Rails 4.1.2 应用程序中,我正在执行以下操作:
scope :popular, -> {
select("images.*, SUM(likes_count + comments_count + reposts_count) as score").
where("DATE(created_at) > DATE(?)", 4.weeks.ago).
order('score DESC')
}
获取最近的一组“流行”图像。问题是,如果没有与此查询匹配的图像,我会得到一个带有所有 nil 值的ActiveRecord::Relation,例如...
#<ActiveRecord::Relation [#<Image id: nil, user_id: nil, image_uid: nil, image_name: nil>]>
这会导致问题,因为集合不为空。如果没有结果,我将如何让该范围返回“nil”,或者如果对象为空或其他内容则拒绝?
更新
Image.popular.select {|i| i.id.present? }
有点解决问题,但对我来说,这似乎更像是一种解决方法而不是解决方案......
【问题讨论】:
-
scope 将始终返回
AR,您可以使用#blank?或#present?进行测试... -
空白?返回假,存在吗?返回 true - 正如我所说的集合不是空的,所以这不起作用:(
标签: mysql ruby-on-rails activerecord ruby-on-rails-4