加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 设计邀请生成accept_invitation_url

发布时间:2020-12-17 03:16:54 所属栏目:百科 来源:网络整理
导读:我正在使用Devise邀请邀请.通常,在邀请电子邮件中会有一个链接,将被邀请者重定向到sign_in页面,这样的一些网址 mywebsite.com/users/invitation/accept?invitation_token=J-azZ8fKtkuAyp2VZWQX 此网址来自invitation_instructions.html: p%= link_to 'Accep
我正在使用Devise邀请邀请.通常,在邀请电子邮件中会有一个链接,将被邀请者重定向到sign_in页面,这样的一些网址

mywebsite.com/users/invitation/accept?invitation_token=J-azZ8fKtkuAyp2VZWQX

此网址来自invitation_instructions.html:

<p><%= link_to 'Accept invitation',accept_invitation_url(@resource,:invitation_token => @token) %></p>

现在我想将控制器中的邀请URL作为json响应返回,如下所示:

def invite
  invitee = User.invite!({:email => email},current_user)
  accept_invitation_url = ....
  render :json => accept_invitation_url
end

任何想法如何获得控制器中的accept_invitation_url?谢谢!

解决方法

尝试在控制器中包含url helpers模块:

class MyController < ApplicationController
  include DeviseInvitable::Controllers::UrlHelpers

  def invite
    invitee = User.invite!({:email => email},current_user)
    render :json => accept_invitation_url(invitee,:invitation_token => invitee.token)
  end
end

可以在here on github找到Devise Invitable Gem的URL Helper模块

好的,默认情况下无法访问原始邀请令牌,因为它是没有访问者的实例变量(source),有两种方法可以解决这个问题.

丑陋的方式,无需修改模型类:

def invite
    invitee = User.invite!({:email => email},current_user)
    raw_token = invitee.instance_variable_get(:@raw_invitation_token)
    render :json => accept_invitation_url(invitee,:invitation_token => raw_token)
  end

干净的方法是,通过向用户模型类添加属性读取器:

# User Model
class User < ActiveRecord::Base
  attr_reader :raw_invitation_token
  # rest of the code
end

# In your controller
def invite
  invitee = User.invite!({:email => email},current_user)
  raw_token = invitee.raw_invitation_token
  render :json => accept_invitation_url(invitee,:invitation_token => raw_token)
end

更新(2015年10月16日):

看起来UrlHelper模块已被删除,邀请作为正常路由处理,因此您可以删除包含DeviseInvitable :: Controllers :: UrlHelpers并将accept_invitation_url调用替换为:

Rails.application.routes.url_helpers.accept_invitation_url(被邀请者,:invitation_token => raw_token)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读