我需要做一个范围,在其中找到所有具有某些扩展名的文件 - 我目前的非功能性尝试是这样的:
scope :visual, where(%w[.gif .jpg .jpeg .tif .tiff].include? File.extname(item_file_name), true)
这种尝试给了我错误 - 你如何创建条件不仅仅是直接 SQL 查询的范围?
您需要直接对这些条件进行编码。
scope :visual, where("RIGHT(item_file_name,3) IN (?)
OR RIGHT(item_file_name,4) IN (?)",
['gif', 'jpg', 'tif'],
['jpeg', 'tiff'])
我建议将文件扩展名或 MIME 类型存储为其自己的列,并针对该列进行查询。 它将比使用字符串函数更具性能。 实现本身会类似,但更简单。