2016-06-12 5 views
1

私は複数の参照 "プロファイル"を持つモデルユーザーを持っています。ユーザーはこれらのプロファイルのいくつかを持つことができ、それらのプロファイルのそれぞれは電子メールに特定のレイアウトを誘導する必要があります。プロファイルを考えてみましょう。私のDevise確認コントローラでは、たとえば、ユーザーのプロファイルに応じて異なるレイアウトが必要です。管理テンプレート 同じアクションのための異なるDeviseメーラーレイアウト

  • ワーカープロファイルをレンダリング:ワーカーテンプレート
  • 両方をレンダリングする:別のテンプレート(ハイブリッド)
  • したがって、私は設定できないレンダリング例えば、ユーザは、

    • 管理者プロファイルを有する場合メーラー/コントローラー用のレイアウトが必要ですが、コントローラーアクション内に設定する必要があります。与えられたユーザのレイアウト名を返すヘルパーlayout_for_user()があるとしましょう。どうすれば使えますか?たとえばDevise mailer?

      class MyDeviseMailer < Devise::Mailer 
          def confirmation_instructions(record, token, options={}) 
           # whange layout based on `layout_for_user(record)` 
           @token = token 
           devise_mail(record, :confirmation_instructions, opts) 
          end 
      end 
      

    答えて

    0

    私はdevise_mailメソッドをオーバーライドする必要がありました

    def confirmation_instructions 
        ... 
        @layout = find_layout_for_user(user) 
        devise_mail(user, :confirmation_instructions, opts) 
    end 
    
    # Override to include custom layouts 
    def devise_mail(record, action, opts={}) 
        initialize_from_record(record) 
        mail(headers_for(action, opts)) do |format| 
        format.html { render layout: @layout } 
        end 
    end 
    
    関連する問題