2010-10-08 60 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