2

routes.rbファイルに次のカスタム ルートがあります。

match '/security_users/:id/email_confirmation/:activation_code' => 'email_confirmation#new'

指定されたSecurityUserの上記のパスを生成するカスタム ヘルパーを作成します。私の application_controler.rb ファイルには、上記の方法があります。

class ApplicationController < ActionController::Base

  protect_from_forgery

  private

    def email_confirmation_path(security_user)
      "/security_users/#{security_user.id}/email_confirmation/#{security_user.activation_code}"
    end

    helper_method :email_confirmation_path

end

しかし、 /views/security_user_mailer/email_confirmation.text.erb テンプレートで次のように呼び出すと:

<%= email_confirmation_path(@security_user) %>

次のエラーが表示されます。

#<#:0x6340ff53> の /security_users 未定義メソッド `email_confirmation_path' で NoMethodError

アドバイスいただけますか?

編集:

以下に、プロセスのワークフローを示します。

まず、ユーザーが作成されると、次の行が実行されます

@security_user.send_email_confirmation

上記のメソッドは、オブジェクト モデル ファイルで次のように定義されます。

def send_email_confirmation
  SecurityUserMailer.email_confirmation(self).deliver
end

次に、メーラー コントローラーで、以下のメソッドが呼び出されます。

def email_confirmation(security_user)
  @security_user = security_user
  mail to: security_user.email, subject: 'Account Created'
end

前の方法では、カスタム パス ジェネレーター メソッドを呼び出す必要があるテンプレートを使用しています。

<%= email_confirmation_path(@security_user) %>

しかし、未定義であるというエラーが発生します。

4

2 に答える 2

1

このメソッドは ApplicationController ではプライベートであるため、サブクラスはアクセスできません。クラスの保護または公開部分に配置する必要があります。

于 2013-06-15T09:12:25.797 に答える