尝试在控制器中包含 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
可以在 github 上找到 Devise Invitable Gem 的 URL Helper 模块
好的,默认情况下无法访问原始邀请令牌,因为它是没有访问器(源)的实例变量,有两种方法可以解决这个问题。
丑陋的方式,不修改你的模型类:
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)