Rails 3.2.8 用に更新された railscasts エピソード 124 の構造を使用して、ベータ版の招待状を作成しようとしています。
現在、招待メールが送信されますが、ActionMailer で作成しているインスタンス変数 (@invitation_link) がビューで nil であるため、ユーザーがサインアップするための URL (招待トークンを含む) が含まれていません。ActionMailer コントローラで @invitation_link を調べると、正しい URL を指していることがわかりますが、ビューでは nil です。
次の質問も確認しましたが、どの解決策もうまくいきませんでした。
Ruby on Railsのメーラーでインスタンス変数をどのように使用しますか?
https://stackoverflow.com/questions/5831038/unable-to-access-instance-variable-in-mailer-view
Actionmailer インスタンス変数の問題 Ruby on Rails
ActionMailer はローカル変数を erb テンプレートに渡します
以下の関連するコード スニペット:
招待_コントローラー.rb
class InvitationsController < ApplicationController
def new
@invitation = Invitation.new
end
def create
@invitation = Invitation.new(params[:invitation])
@invitation.sender = current_user
if @invitation.save
if signed_in?
InvitationMailer.invitation(@invitation).deliver
flash[:notice] = "Thank you, invitation sent."
redirect_to current_user
else
flash[:notice] = "Thank you, we will notify when we are ready."
redirect_to root_url
end
else
render :action => 'new'
end
end
end
Invitation_mailer.rb ファイル内
class InvitationMailer < ActionMailer::Base
default from: "holler@thesite.com", content_type: "text/html"
def invitation(invitation)
mail to: invitation.recipient_email, subject: "Invitation"
@invitation_link = invited_url(invitation.token)
invitation.update_attribute(:sent_at, Time.now)
end
end
ビュー/invitation_mailer/invitation.text.erb
You are invited to join the site!
<%= @invitation_link %> # INSTANCE VARIABLE THAT IS NIL IN VIEW
routes.rb (関連する行のみを表示)
match '/invited/:invitation_token', to: 'users#new_invitee', as: 'invited'