首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设计邀请生成accept_invitation_url

设计邀请生成accept_invitation_url
EN

Stack Overflow用户
提问于 2013-11-06 00:31:09
回答 2查看 8.9K关注 0票数 6

我用的是吸引人的设计。通常,在邀请电子邮件中将有一个链接来将受邀者重定向到sign_in页面,一些url如下所示

代码语言:javascript
复制
mywebsite.com/users/invitation/accept?invitation_token=J-azZ8fKtkuAyp2VZWQX

这个网址来自invitation_instructions.html:

代码语言:javascript
复制
<p><%= link_to 'Accept invitation', accept_invitation_url(@resource, :invitation_token => @token) %></p>

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

代码语言:javascript
复制
def invite
  invitee = User.invite!({:email => email}, current_user)
  accept_invitation_url = ....
  render :json => accept_invitation_url
end

知道如何在控制器中获取accept_invitation_url吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-06 00:48:56

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

代码语言:javascript
复制
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

用于设计可访问宝石的URL模块可以找到在github上

好的,原始邀请令牌在默认情况下是不可访问的,因为它是一个没有访问器(来源)的实例变量,有两种方法可以解决这个问题。

在不修改模型类的情况下,这是一种丑陋的方式:

代码语言:javascript
复制
  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

通过将属性读取器添加到用户模型类中,这是一种简洁的方法:

代码语言:javascript
复制
# 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模块,并将邀请作为正常路由处理,因此您可以删除include DeviseInvitable::Controllers::UrlHelpers并将accept_invitation_url调用替换为:

Rails.application.routes.url_helpers.accept_invitation_url(invitee, :invitation_token => raw_token)

票数 7
EN

Stack Overflow用户

发布于 2018-08-09 12:04:04

我发现要在标准邀请邮件视图之外使用accept_invitation_url,需要在邮件程序中包含以下帮助程序:

代码语言:javascript
复制
include Devise::Controllers::UrlHelpers

我试过Rails.application.routes.url_helpers.accept_invitation_url(invitee, :invitation_token => raw_token),但它不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19801849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档