0
我有一个表“电子邮件”与字段“内容”其中数据存储为散列对象。我想在这个表中用参数“email => [email protected]”进行搜索,其中:email是密钥,“[email protected]”是哈希对象的值。传递哈希对象值作为搜索参数
在此先感谢
我有一个表“电子邮件”与字段“内容”其中数据存储为散列对象。我想在这个表中用参数“email => [email protected]”进行搜索,其中:email是密钥,“[email protected]”是哈希对象的值。传递哈希对象值作为搜索参数
在此先感谢
此搜索将是非常低效的。如果您计划对电子邮件进行大量搜索,则可以谨慎添加索引列以将电子邮件存储在您的表中。
我假设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)
感谢名单KandadaBoggu。应该有hash.map而不是map。 – a5his 2010-10-08 05:30:18