嘿,伙计们,我正试着从Ruby on Rails的数据库中随机选择数据。不幸的是,sqlite和mysql对“random”函数使用不同的名称。Mysql使用rand(),sqlite使用random()。到目前为止,我很高兴在我的开发环境中使用sqlite,我不想为此放弃它。
所以我有个解决办法,但我不太满意。首先,RoR中是否有一个更清晰的抽象来获取随机函数?如果不是,这是获得“适配器”的最佳方式吗?

# FIXME: There has to be a better way...
adapter = Rails.configuration.database_configuration[Rails.configuration.environment]["adapter"]
if adapter == "sqlite3"
  # sqllite calls it rand
  random = "random"
else
  # mysql calls it rand
  random = "rand"
end

query.push("SELECT *, (" +  random + "() * (0.1 * value)) AS weighted_random_value...")

最佳答案

通过创建一个函数,可以将MySQL的rand()有效地别名为标准的random()

CREATE FUNCTION random() RETURNS FLOAT NO SQL SQL SECURITY INVOKER RETURN rand();

09-20 23:11