2014-10-22 7 views
1

В настоящее время я внедряю очень простой IMAP-клиент в приложение, которое я создаю в Rails. Я использую почтовый камень, который предоставляет множество полезных способов анализа данных imap.Сохранить ruby ​​Mail (from gem) object в ActiveRecord

Я хотел бы сохранить объект Mail, который он генерирует в базе данных. Это возможно?

т.е.

email = Email.new 
    email.uid = id 
    email.mail = Mail.new(imap.fetch(id, "RFC822")[0]["attr"]["RFC822"] 
    email.save 

Это удобство вещь, где я не хочу, чтобы загрузить объект снова, если я не должен, так как производительность на вызов IMAP медленно, но я хотел бы быть в состоянии иметь его там, чтобы оглянуться назад (и сделать любое разрушение, которое мне нужно было позже).

я мог бы назвать

email.find(x).mail.body 

и другие полезные вещи без того, чтобы пристроить эту функциональность в моей собственной модели электронной почты.

Q1: Как бы настроить активную модель записи?

Q1a: Я бы лучше сделал что-то, что исключило вложения, чтобы сделать его более легким объектом для хранения? (Это возможно?)

Цените вашу помощь,

+0

Возможно, я должен уточнить здесь вопрос. Я действительно спрашиваю, могу ли я просто сохранить объект в поле базы данных. т. е. когда я получаю поле, я получаю объект, с которым я могу тогда что-то делать. Я хочу, чтобы всякий раз, когда я его храню, мне нужно настроить полную схему базы данных для электронных писем. – Carpela

ответ

0

Несколько баз данных схемы была разработана для хранения почты. Я работал над one, и есть другие. Поверьте, это тяжелая работа. Результат может быть очень полезным, но поскольку ваш вопрос не фокусируется на результате, я подозреваю, что это не стоит в вашем случае.

Возможно, вам будет проще использовать библиотеку json для написания графического объекта в файл с автоматически выводимой структурой, поскольку большинство json-библиотек, похоже, поддерживают эти дни. Это не позволит вам сделать так много, но это очень намного проще и позволяет хранить как полностью, так и не полностью полученные сообщения. Если вы не получили определенную часть тела, библиотека json просто напишет нуль для этого поля.

0

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

A1: rails g model Email from to subject date:datetime message_id body. это только основные части, вы должны начать.

A1a: Вам не нужно хранить вложения, если вы этого не хотите. Если вам это нужно, вам, вероятно, лучше не хранить их в самой базе данных. Вложения аналогичны загрузкам, поэтому есть много драгоценных камней, которые могут вам помочь (https://www.ruby-toolbox.com/categories/rails_file_uploads).

+0

Я не собираюсь разбить объект. Я счастлив сохранить его, как есть, а затем делать то, что я делаю в контроллере. Очевидно, я мог бы извлечь каждую часть информации по частям, но почтовый камень кажется гораздо более удобным способом сделать это. Хранить объект в db. Затем, если мне когда-нибудь понадобится вернуться к нему, я всегда могу получить весь объект. Если я возьму куски, я оставлю все остальное. – Carpela

+0

Базы данных полезны для поиска предметов, основанных на их свойствах. Если вам это не нужно, просто захотите сохранить почту где-нибудь, чтобы облегчить доступ к исходным данным, я предпочел бы простое хранилище файлов вместо того, чтобы тратить впустую любые ресурсы базы данных. – jomue

0

Используя столбцы postgres jsonb, вы можете сохранить электронное письмо как json, в моем случае я игнорирую вложения (которые храню ссылку и получаю по мере необходимости). Это хорошо работает с почтовым камнем.