2013-10-26 39 views
2

我有一個文件名。我需要找到匹配file_name屬性的記錄。基於改變的屬性值的查詢導軌模型

我的問題是文件名已被音譯,這是一個單向的過程。我沒有辦法將un音譯爲文件名,所以我沒有別的選擇,只能根據記錄的file_name屬性的音譯版本進行比較。

如果我只是比較文件名,我會做:

Example.where(file_name: file_name} 

如果我能音譯file_name我會做:

Example.where(file_name: ActiveSupport::Inflector.untransliterate(file_name) 

但是我不能,所以我怎麼能高效做相當於:

Example.all.detect do |e| 
ActiveSupport::Inflector.transliterate(e.file_name) == file_name 
end 
+0

我有同樣的問題。你有沒有找到解決方案? –

+0

@ Sk.Irfan將音譯字段存儲在單獨的列中,並使用未翻譯的字段進行查找。如果你不能這樣做,那麼我沒有解決方案。 – Undistraction

回答

3

添加另一個保存音譯值的字段。然後很容易:

Example.where(transliterated_file_name: file_name) 

如果它不是一個選項,那麼它不是很容易。您可以將所有替換爲find_each,但仍然需要在應用程序級別進行比較。

+1

該死的......我正要回答同樣的問題:)一個'before_save'回調可以完成這項工作。或者在文件名更改時覆蓋'file_name ='以填寫該字段。 –

1

添加一個新列可以像Tumas建議的那樣工作,但是如果您使用支持將字段轉換爲ASCII的數據庫,則可能需要考慮該選項。

MySQL的:

Example.where("file_name COLLATE utf8_general_ci = ?", file_name)