ruby-on-rails – 在RoR中随机选择不同的数据库

我需要从db中选择随机记录.在我用于开发的sqlite3中,有一个名为Random()的函数.但是,在 Postgresql中它被称为Rand().我不记得关于 MySql,但可能是因为它在那里被称为.

所以如果我有一个代码(对于sqlite3)

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(...)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...