これに関するスレッドがいくつかあることは知っていますが、私が見た限りでは、それらはかなり古く、おそらく時代遅れになっている可能性があります。
私は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 のドキュメントを参照してください。