Devise_invitable で招待状を送信する際のエラー

概要

これに関するスレッドがいくつかあることは知っていますが、私が見た限りでは、それらはかなり古く、おそらく時代遅れになっている可能性があります。

私はdeviceとdevice_invitableを使用しています。その背後にある考え方は、管理者と教師が新しいユーザー (学生または教師) を招待できるようにすることです。ただし、招待状を送信すると、次のエラーが表示されます。

Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true
Extracted source (around line #4):
2
3
4
5
6
7
              
            @virtual_path = "devise/mailer/invitation_instructions";; @output_buffer.safe_append='<p>'.freeze; @output_buffer.append=( t("devise.mailer.invitation_instructions.hello", email: @resource.email) ); @output_buffer.safe_append='</p>

<p>'.freeze; @output_buffer.append=( t("devise.mailer.invitation_instructions.someone_invited_you", url: root_url) ); @output_buffer.safe_append='</p>

<p>'.freeze; @output_buffer.append=( link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, invitation_token: @token) ); @output_buffer.safe_append='</p>

さまざまなことを試しましたが、現在のコードは次のようになります。

招待コントローラー

class Users::InvitationsController < Devise::InvitationsController

  def create
    super do |resource|
      if resource.persisted? && resource.role == "aluno"
        AlunoProfile.create(
          user: resource,
          morada: params[:user][:morada],
          birthdate: params[:user][:birthdate],
          nif: params[:user][:nif],
          numero_utente: params[:user][:numero_utente],
          cartao_cidadao: params[:user][:cartao_cidadao],
          validity: params[:user][:validity],
          contacto: params[:user][:contacto],
          encarregado_educação: params[:user][:encarregado_educação],
          grau_parentesco: params[:user][:grau_parentesco],
          contacto_emergencia: params[:user][:contacto_emergencia],
          aulas: params[:user][:aulas],
          horario_preferencial: params[:user][:horario_preferencial],
          recolha_dados: params[:user][:recolha_dados],
          fotografias_captadas: params[:user][:fotografias_captadas]
        )
      end
    end
  end

  private

  def set_params
    params.require(:user).permit(:email, :first_name, :last_name)
  end
end

招待状_説明ビュー

<p><%= t("devise.mailer.invitation_instructions.hello", email: @resource.email) %></p>

<p><%= t("devise.mailer.invitation_instructions.someone_invited_you", url: root_url) %></p>

<p><%= link_to t("devise.mailer.invitation_instructions.accept"), accept_invitation_url(@resource, invitation_token: @token) %></p>

<% if @resource.invitation_due_at %>
  <p><%= t("devise.mailer.invitation_instructions.accept_until", due_date: l(@resource.invitation_due_at, format: :'devise.mailer.invitation_instructions.accept_until_format')) %></p>
<% end %>

<p><%= t("devise.mailer.invitation_instructions.ignore") %></p>

私のルート

Rails.application.routes.draw do
  # devise_for :users
  devise_for :users, RegistrationsController: { registrations: 'registrations'}

  root to: "pages#home"

  get "about", to: "pages#about"
  get "school", to: "pages#school"
  get "today", to: "aulas#today"
  get "clientes", to: "user_aulas#clientes"

  resources :aluno_profiles
  resources :aulas do
    resources :bookings, only: %i[create destroy]
  end


  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
  # Can be used by load balancers and uptime monitors to verify that the app is live.
  get "up" => "rails/health#show", as: :rails_health_check

  # Defines the root path route ("/")
  # root "posts#index"
end```

解決策

メーラービューで有効な URL を使用してリンクを構築できるようにするには、アプリケーションが実行されているドメインを Ruby on Rails に伝える必要があります。

config/initializers/**.rb ファイルで config.action_mailer.default_url_options を次のように設定します。

config.action_mailer.default_url_options = { host: "example.com" }

ActionMailer::Base のドキュメントを参照してください。