0

私は次の構造を持っています

class User < ActiveRecord::Base
  devise :invitable
end

class Administrator < User
end

管理者を招待すると、招待を受け入れるためのリンクが に移動します。/users/invitation/accept必要なのは/administrators/invitation/acceptです。

管理者とデバイス用にオーバーライドされたビューがあるので、app/views/administrators/invitable/edit.html.erb. ユーザーに関係のないフィールドをこのページに追加しようとしています。

メール送信プロセス全体を上書きすることなく、それを上書きする方法はありますか?

4

1 に答える 1

0

はい。を使用して必然的なビューを作成できます

rails generate devise_invitable:views

生成されたメーラー ファイル:

app/views/devise/mailer/invitation_instructions.html.erb

次のように編集します。

<p><%= t("devise.mailer.invitation_instructions.hello", email: @resource.email) %></p>

<p><%= t("devise.mailer.invitation_instructions.someone_invited_you", url: root_url) %></p>

<%
  url_part = if @resource.is_a?(Admininstrator)
               'administrators'
             else
               @resource.class.to_s.underscore.pluralize
             end

%>
<p><%= link_to t("devise.mailer.invitation_instructions.accept"),
               "http://#{MAILER_HOST}/#{url_part}/invitation/accept?invitation_token=#{@token}" %></p>

<p><%= t("devise.mailer.invitation_instructions.ignore").html_safe %></p>

注: 表示されるルート sub_part は、主にデバイス ルートをオーバーライドする方法によって生成されます。

つまり、チェック

rake routes | grep -i invitation

パスあり

 new_administrator_invitation GET      /administrators/invitation/new(.:format)                                 /administrators/invitations#new

以下を使用して、この方法でオーバーライドできます。

  devise_for :administrator, controllers: {
      sessions: 'administrators/sessions',
      registrations: 'administrators/registrations',
      passwords: 'administrators/passwords',
      invitations: 'administrators/invitations' ### <== NOTE THIS
  },
             path_names: {
                 sign_in: 'login',
                 sign_out: 'logout',
                 registration: 'register'
             },
             path: 'administrators' ### <== NOTE THIS

私のセットアップでこの問題を修正しました。

楽しい。

于 2016-03-11T01:43:53.067 に答える