Как передать дополнительные параметры (имя организации) на электронную почту Devise Invitable - PullRequest
0 голосов
/ 19 марта 2019

В моем приложении есть пользователи и сайты (воспринимайте это как пользователей и организации). Между ними находится таблица поиска, которая называется SiteUser. В SiteUser:

belongs_to :site

belongs_to :user

before_validation :set_user_id, if: ->() { email != nil }

def set_user_id existing_user = User.find_by(email: email) self.user = if existing_user.present? UserMailer.notify_existing_user(site, existing_user).deliver_now unless Rails.env.test? existing_user else User.invite!(email: email) end end

Мне нужно, чтобы тема создаваемого электронного письма включала название сайта. «Пример Компания пригласила вас присоединиться к их сайту!»

И в теле письма мне также нужен заголовок сайта.

Я не совсем понимаю, как перевести параметр сайта в devise invitable. Как вы можете видеть из приведенного выше кода, если пользователь, приглашаемый на сайт, уже существует в нашей системе, я использую свою собственную почтовую программу, в которой я передаю site и existing_user, поэтому у меня есть доступ к нему. по моему почтовому представлению.

class UserMailer < ApplicationMailer def notify_existing_user(site, user) @site = site @user = user mail to: @user.email, subject: "You've been given access to #{@site.title} in the Dashboard." end end

Я не могу понять, как сделать это подобным образом с помощью devive invitable mailer, который используется, когда пользователь еще не существует в системе.

Любая помощь, которую вы могли бы оказать, будет невероятно признательна!

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Вы всегда можете переопределить метод subject_for устройства. Нашел это по вопросам драгоценных камней, что также предлагает другой способ: https://github.com/scambra/devise_invitable/issues/660#issuecomment-277242853

Надеюсь, это поможет!

0 голосов
/ 21 марта 2019

Я решил добавить временный / виртуальный атрибут для пользователя с именем invite_site_name.Поскольку проблема заключалась в том, что site не был атрибутом пользователя, поэтому я не мог отправить site в User.invite!.

class User < ActiveRecord::Base
  attr_accessor :invite_site_name

и затем в моем CustomDeviseMailer я получил к нему доступ:

class CustomDeviseMailer < Devise::Mailer

  helper :application # gives access to all helpers defined within `application_helper`.
  include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
  default template_path: 'devise/mailer' # to make sure that your mailer uses the devise views

  def invitation_instructions(record, token, opts={})
    opts[:subject] = "#{record.invite_site_name} has invited you to their Dashboard! Instructions inside!"

    super
  end
end
...