ruby-on-rails – 设计邀请生成accept_invitation_url
我正在使用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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |