Scopo insolito in rotaie
-
12-11-2019 - |
Domanda
Ho bisogno di fare un ambito in cui trovo tutti i file con determinate estensioni - il mio attuale tentativo non funzionale è questo:
scope :visual, where(%w[.gif .jpg .jpeg .tif .tiff].include? File.extname(item_file_name), true)
.
Questo tentativo mi dà errori - Come si creano scopi dove le condizioni non sono solo una query SQL dritta?
Soluzione
È necessario codificare direttamente questi criteri.
scope :visual, where("RIGHT(item_file_name,3) IN (?)
OR RIGHT(item_file_name,4) IN (?)",
['gif', 'jpg', 'tif'],
['jpeg', 'tiff'])
.
Raccomando di memorizzare l'estensione del file o il tipo MIME come una propria colonna e interrogazione contro questo.Sarà più performante che usare le funzioni di stringa.L'implementazione stessa sarebbe simile, ma più semplice.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow