我需要从db中选择随机记录.在我用于开发的sqlite3中,有一个名为Random()的函数.但是,在
Postgresql中它被称为Rand().我不记得关于
MySql,但可能是因为它在那里被称为.
data = Items.where(pubshied: is_pubshied).order("RANDOM()").limit(count)
如何确保它可以与不同的数据库一起使用?
解决方法
Rails不支持开箱即用.我相信我通过模型扩展实现了这一点(我不再使用它,因为我强制使用Postgresql),但这样的东西可以工作:
module Randomize extend ActiveSupport::Concern included do scope :random,-> { order(rand_cmd) } end module ClassMethods def rand_cmd if connection.adapter_name =~ /MysqL/i 'rand()' else 'random()' end end end end
然后你可以做
class Item include Randomize end Item.where(...).random.limit(...)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。