单个表继承与Devise Invitable接受url不使用child

时间:2016-01-30 21:08:07

标签: ruby-on-rails devise devise-invitable

我有以下结构

class User < ActiveRecord::Base
  devise :invitable
end

class Administrator < User
end

当我邀请管理员时,接受邀请的链接转到/users/invitation/accept,我需要的是/administrators/invitation/accept

我已经为管理员和设计覆盖了视图,所以我有app/views/administrators/invitable/edit.html.erb。我尝试在此页面中添加与用户无关的字段。

有没有办法覆盖它而不必覆盖整个电子邮件发送过程?

1 个答案:

答案 0 :(得分: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

刚刚在我的设置中解决了这个问题。

享受。