Une façon est
Job.all.select{|j| j =~ /^\d+$/}
mais ce ne sera pas aussi efficace que la version MySQL.
Une autre possibilité consiste à utiliser une portée nommée pour masquer le SQL laid :
named_scope :all_digits, lambda { |regex_str|
{ :condition => [" invoice_number REGEXP '?' " , regex_str] }
}
Ensuite, vous avez Job.all_digits
.
Notez que dans le deuxième exemple, vous assemblez une requête pour la base de données, donc regex_str
doit être une chaîne MySQL regex au lieu d'un objet Ruby Regex, qui a une syntaxe légèrement différente.