Hey les gars, j'essaie de sélectionner des données aléatoires de la base de données dans Ruby on Rails. Malheureusement, sqlite et mysql utilisent des noms différents pour la fonction "random". Mysql utilise rand(), sqlite use random(). J'ai été plutôt content d'utiliser sqlite dans mes environnements de développement et je ne veux pas abandonner pour ça.Sélection aléatoire dans les rails sqlite vs mysql
J'ai donc une solution pour cela, mais je ne suis pas très content. Premièrement, y a-t-il une abstraction plus propre dans RoR pour obtenir la fonction aléatoire? Et sinon, est-ce la meilleure façon d'obtenir le "adaptateur"?
# 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...")
Il est des années plus tard, et quelqu'un a écrit un petit bijou pour Rails 3 pour gérer ce - https://github.com/spilliton/randumb – Troy