我试图通过一个属性 Select 对象,使用@videos.uniq{|p| p.author}

  time = Time.new(2014, 12)
  start_time = time.beginning_of_month
  end_time = time.end_of_month

  videos = Video.where("created_at > ? AND created_at < ?", start_time, end_time).where("likes > ?", 15)
  selected_videos = videos.uniq{|p| p.author}
  puts videos.count, videos.class, selected_videos.count 
 #=> 23, Video::ActiveRecord_Relation, 23

  videos_first = videos.first(23)
  selected_videos = videos_first.uniq{|p| p.author}
  puts videos_first.count, videos_first.class, selected_videos.count
  #=> 23, array, 10

.uniq不代表ActiveRecord_Relation.问题是查询返回Video::ActiveRecord_Relation,但我需要array.

当然,这可以通过使用to_a来实现,但这是优雅的吗?

  1. 正确的处理方法是什么?
  2. 可以用.uniqactiverecord:relation吗?

推荐答案

如果需要访问查询结果,只需在ActiveRecord::Relation实例上使用#to_a即可.

rails guides岁时,你可以在Rails 4.0上找到显著的变化:"Model.all现在返回一个ActiveRecord::Relation,而不是一个记录array.如果你真的想要数组,请使用Relation#to _a.在某些特定情况下,升级时可能会导致中断."这适用于其他关系方法,例如:where.

selected_videos = videos.to_a.uniq{|p| p.author}

Ruby-on-rails相关问答推荐

带有rails 7.1的Lightbox2未初始化

Ubuntu Webhooks无法读取安装的正确RVM Ruby

仅在两个子域间共享Rails cookies,并为所有其他子域使用单独的cookie

为什么是 json.partial!使用新的哈希语法传递本地时,jbuiler 模板中的行不执行?

Rails 3.1 assets资源 - 奇怪的开发服务

Ruby/Rails 中的类方法与常量

使用devise gem点击确认链接后避免登录?

没有要加载的文件 - readline

如何在 RoR 中实现成就系统

RubyMine - 关闭在空行中间单击的功能

参数错误:范围主体需要可调用

如何在 Rails 迁移中添加一些插入?

Rails 4模块的未初始化常量

has_many :通过 class_name 和 foreign_key

ruby/ruby on rails 内存泄漏检测

如何在两个字段上对 ruby​​/rails 进行排序?

为什么 Google Oauth 在我的 Rails 应用程序中返回无效的 redirect_urI?

何时(如果)合并 ActiveRecord 迁移?

如何使用 url 连接到 postgresql

Ruby on Rails Bootstrap Glyphicons 不工作