передача значений хеш-объекта в качестве параметра поиска - PullRequest
0 голосов
/ 08 октября 2010

У меня есть таблица «Электронная почта» с полем «содержимое», где данные хранятся в виде хеш-объекта. Я хочу выполнить поиск в этой таблице с параметром "email => a5his@gmail.com", где: email - это ключ, а "a5his@gmail.com" - это значение хеш-объекта.

Заранее спасибо

1 Ответ

1 голос
/ 08 октября 2010

Этот поиск будет крайне неэффективным.Если вы планируете выполнять поиск по электронной почте, было бы целесообразно добавить индексированный столбец для хранения электронной почты в вашей таблице.

Я предполагаю, что contents - это текстовое поле для хранения сериализованного хэша,Хэши сериализуются в формате YAML, который представлен в виде простого текста.Таким образом, вы можете выполнять обычный поиск по шаблону в столбце content.

Например: хэш, как показано ниже

{"email" => "a5his@gmail.com"}

, сериализуется в строку

"--- \nemail: a5his@gmail.com\n"

Таким образом, вы можете написать простое сопоставление следующим образом:

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

Если вы планируете запросить несколько динамических полей, тогда

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 => "5his@gmail.com", :zip => 94307)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...