【问题标题】:Single Table Inheritance with Devise Invitable accept url not using child带有设计可邀请接受 url 的单表继承不使用子
【发布时间】:2016-01-30 21:08:07
【问题描述】:

我有以下结构

class User < ActiveRecord::Base
  devise :invitable
end

class Administrator < User
end

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

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

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

【问题讨论】:

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


    【解决方案1】:

    是的。您可以使用

    创建不可避免的视图
    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
    

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

    享受吧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多