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