Можно ли отправлять электронные письма пользователям, которые @ упомянуты в рельсах ActionText?

Я следил за руководством GoRails по использованию @mentions в ActionText. Я хочу автоматически отправлять электронное письмо любому @ упомянутому пользователю, чтобы предупредить его о разговоре. Я бы предположил, что это тривиально в Rails, но не могу найти никакой документации о том, как это сделать.

Кто-нибудь знает, как это можно сделать?

GoRails: https://gorails.com/episodes/at-mentions-with-actiontext < / а>


person hellion    schedule 01.06.2019    source источник


Ответы (4)


Я не на 100%, но вот идея, с которой можно поиграть. Поскольку в руководстве добавляются внедренные объекты к объекту форматированного текста, вы можете сделать что-то вроде этого в своей модели:

has_rich_text :content

after_create do
  content.embeds.each do |embed|
    # now you have each embeded object, I guess you could use that sgid that
    # he name on the tutorial a few times to find if the embeded object is a 
    # user or something else, and then fire the email. I leave this part to 
    # you since I didn't actually tried ActionText yet, I just saw the 
    # tutorial and read parts of the code ;P
  end
end
person arieljuod    schedule 02.06.2019
comment
Да, должно быть что-то в этом роде, я думаю (я тоже еще не трогал actiontext :)) - person Sergio Tulentsev; 02.06.2019

Основываясь на вашем описании, я считаю, что вы хотели бы иметь комплексную функцию, которая будет выполнять следующие действия:

  1. обнаруживать @ + username в текстовой области (- вам нужен прослушиватель событий ввода с клавиатуры в текстовой области и распознавание специального условия символьного шаблона для @ + username)
  2. перечислить всех пользователей, относящихся к вашему @ + username нечеткому поиску (- вам необходимо создать API списка пользователей с поддержкой поиска по имени пользователя и разрешить F / E запросы к этому API при вводе текста в текстовой области с помощью @ + username)
  3. иметь возможность выбрать пользователя из раскрывающегося списка @mention (- чистое поведение F / E, просто нужен другой прослушиватель событий, чтобы обнаруживать выбор пользователя и вводить выбранное имя пользователя в эту текстовую область.
  4. Автоматическое оповещение пользователей @mention после комментирования беседы (- здесь необходима функция AB / E. Ваш сервер будет иметь эти данные беседы после комментирования, и серверу необходимо проверить, содержит ли беседа какой-либо раздел @mention, если он есть, затем найдите пользователя, связанного с этим @mention, и отправить электронное письмо пользователю, напрямую используя Mailer или косвенно используя Mail Worker.)

Это всего лишь один простой способ реализовать эту функцию без использования стороннего интерфейса. Даже если вы собираетесь использовать ActionText в Trix edior, вам нужно как минимум обладать способностями

  1. предоставление API для возврата результатов поиска по списку пользователей
  2. и отправка писем этим @mention пользователям, по крайней мере, в B / E.

Дайте мне знать, если вам понадобятся дополнительные подробности, если какая-либо часть моего комментария здесь неясна.

person QuintinX    schedule 02.06.2019
comment
Поскольку отправка электронной почты в любом случае должна происходить на бэкэнде, нет необходимости беспокоиться обо всех этих наворотах внешнего интерфейса (автозаполнение и т. Д.). Они предназначены только для UX. И основная функциональность очень проста: когда текст сохраняется в базе данных, сканировать его на предмет @mentions и ставить электронные письма в очередь пользователям с найденными дескрипторами. И если мы скажем так, тогда actiontext / trix станет неактуальным. Backend не заботится о том, какой редактор использовался для написания текста. - person Sergio Tulentsev; 02.06.2019

По этой теме есть руководство по GoRails: https://gorails.com/episodes/notifications-action-text-user-mentions

Глядя на источник код кажется

after_create :send_notifications

def send_notifications
  users = user_mentions
  users.each do |user|
    PostMailer.user_mention(self, user).deliver_now
  end
end

def user_mentions
  @users ||= body.body.attachments.select{ |a| a.attachable.class == User }.map(&:attachable).uniq
end
person daibhin    schedule 03.12.2019
comment
А еще лучше ты умеешь body.body.attachables.select { |a| a.class == User }.uniq - person daibhin; 03.12.2019

Я интегрировал ActionText @mentions с замеченным драгоценным камнем, чтобы отправлять электронные письма или текстовые сообщения упомянутым пользователям. Кажется, работает очень хорошо. Как обсуждалось выше, я вытащил пользователей, упомянутых в каждом сообщении, с помощью:

body.body.attachments.select{|a| a.attachable.class==User}.map(&:attachable).uniq
person Shai Kamin    schedule 08.10.2020