2010-10-08 59 views

回答

1

此搜索將是非常低效的。如果您計劃對電子郵件進行大量搜索,則可以謹慎添加索引列以將電子郵件存儲在您的表中。

我假設contents是一個文本字段來存儲序列化的哈希。哈希以YAML格式進行序列化,該格式爲純文本格式。因此,您可以在content列上執行常規通配符搜索。

例如: 如下圖所示

{"email" => "[email protected]"} 

哈希是連載於字符串

"--- \nemail: [email protected]\n" 

所以,你可以按如下編寫一個簡單的匹配:

Email.all(:conditions => ["content LIKE ? ", "%email: #{email}%"]) 

如果您正在計劃查詢幾個動態字段,然後,

0現在
class Email < ActiveRecord::Base 
    def self.find_all_by_dynamic(hash) 
    ca = hash.map {|k, v| ["contents LIKE ?", "%#{k}: #{v}%"]}.transpose 
    Email.all(:conditions => [ca[0].join(" AND "), *ca[1]]) 
    end 
end 

您可以使用新的方法爲:

Email.find_all_by_dynamic(:email => "[email protected]", :zip => 94307) 
+0

感謝名單KandadaBoggu。應該有hash.map而不是map。 – a5his 2010-10-08 05:30:18