Rails中的异常范围

时间:2011-05-13 03:38:09

标签: ruby-on-rails ruby-on-rails-3 scopes

我需要做一个范围,我找到所有具有特定扩展名的文件 - 我当前的非功能性尝试是这样的:

scope :visual, where(%w[.gif .jpg .jpeg .tif .tiff].include? File.extname(item_file_name), true)

这种尝试给了我错误 - 如何创建条件不仅仅是直接SQL查询的范围?

1 个答案:

答案 0 :(得分:0)

您需要直接对这些条件进行编码。

scope :visual, where("RIGHT(item_file_name,3) IN (?)
                      OR RIGHT(item_file_name,4) IN (?)",
               ['gif', 'jpg', 'tif'],
               ['jpeg', 'tiff'])

我建议将文件扩展名或MIME类型存储为自己的列,然后查询。它比使用字符串函数更高效。实现本身会类似,但更简单。