这个问题似乎很简单,但我从来没有遇到过一个这样的。
具体设置如下:
Post has_many :reader_links
Post has_many :readers, :through => :reader_links
我需要找出是否有读者阅读讯息。
@post.reader_links.where('created_at >= ?', 45.minutes.ago).any?
伟大的作品。
@post.readers.where('created_at >= ?', 45.minutes.ago),any?
因为它是相混淆是否引发一个不明确的表列误差created_at
柱意味着读取器对象或对象reader_link的。 这是因为类读者的实际上是用户。 如何查询谁是由reader_links创建44分钟前的读者?
我正在寻找类似的东西..
@post.readers.where('reader_link.created_at >= ?', 45.minutes.ago)
如果我得到它的权利,你只需要指定created_at
你在谈论列:
@post.readers.where('reader_links.created_at >= ?', 45.minutes.ago).any?
你不需经过合并范围摆脱ambigious错误的,所以每个范围都有它自己的可视范围。
使用meta_where
:
Post.scoped & (ReaderLink.scoped & User.where(:created_at.gt => 45.minutes.ago))
无meta_where
:
Post.scoped.merge(ReaderLink.scoped.merge(User.where('created_at >= ?', 45.minutes.ago))
这将导致数组Post
含reader_links和读者的数据超过45分钟年轻所有的读者对象。 请尝试在铁轨控制台。
编辑:对于单篇文章
post_with_fresh_users = Post.where('id = ?', some_id).merge(ReaderLink.scoped.merge(User.where('created_at >= ?', 45.minutes.ago))
编辑:后(不同的顺序)的所有新鲜读者
fresh_readers_for_post = User.where('created_at >= ?', 45.minutes.ago).merge(ReaderLink.scoped.merge(Post.where('id = ?', @post.id))
这个怎么运作:
http://benhoskin.gs/2012/07/04/arel-merge-a-hidden-gem