2

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'
4

2 に答える 2

3

この方法を試してください

これはあなたのInvitationMailer

def invitation(invitation)
  @invitation = invitation
  mail(:to => @invitation.recipient_email, :subject => "Invitation")
end

今、あなたの中でInvitationsController

if signed_in?
  @invitation.update_attribute(:sent_at, Time.now)
  InvitationMailer.invitation(@invitation).deliver
  ...
else
  ...
end

今、views/invitation_mailer/invitation.text.erb

You are invited to join the site!
<%= invited_url(@invitation.token) %> # INSTANCE VARIABLE THAT IS NIL IN VIEW
于 2012-11-09T06:50:33.143 に答える
0

これを試して...

@invitation_link = invited_url(invitation.token, :host => "localhost:3000")

于 2012-11-09T06:22:54.443 に答える