我用的是吸引人的设计。通常,在邀请电子邮件中将有一个链接来将受邀者重定向到sign_in页面,一些url如下所示
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吗?谢谢!
发布于 2013-11-06 00:48:56
尝试在控制器中包括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用于设计可访问宝石的URL模块可以找到在github上
好的,原始邀请令牌在默认情况下是不可访问的,因为它是一个没有访问器(来源)的实例变量,有两种方法可以解决这个问题。
在不修改模型类的情况下,这是一种丑陋的方式:
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模块,并将邀请作为正常路由处理,因此您可以删除include DeviseInvitable::Controllers::UrlHelpers并将accept_invitation_url调用替换为:
Rails.application.routes.url_helpers.accept_invitation_url(invitee, :invitation_token => raw_token)
发布于 2018-08-09 12:04:04
我发现要在标准邀请邮件视图之外使用accept_invitation_url,需要在邮件程序中包含以下帮助程序:
include Devise::Controllers::UrlHelpers我试过Rails.application.routes.url_helpers.accept_invitation_url(invitee, :invitation_token => raw_token),但它不起作用。
https://stackoverflow.com/questions/19801849
复制相似问题