You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails中Devise Invitable报错:undefined method `deliver_invitation'

问题分析与解决:Devise Invitable调用deliver_invitation报错

错误原因

你遇到的NoMethodError本质是方法调用对象错了:User.where(id: @attendee.user_id)返回的是ActiveRecord关系集合对象,而deliver_invitation是Devise Invitable提供给单个User实例的方法,不能直接在集合上调用。

修正方案

方案1:直接获取单个用户实例

修改send_invite方法,用find_by拿到单个User对象后再调用方法:

def send_invite
  @attendee = Attendee.find(params[:attendee_id])
  user = User.find_by(id: @attendee.user_id)
  user.deliver_invitation if user.present? # 增加判断避免nil调用报错
  redirect_to meeting_url(@attendee.meeting)
end

方案2:利用模型关联简化代码

如果你的Attendee模型已经定义了belongs_to :user关联,可以直接通过关联获取用户:

def send_invite
  @attendee = Attendee.find(params[:attendee_id])
  @attendee.user.deliver_invitation if @attendee.user.present?
  redirect_to meeting_url(@attendee.meeting)
end

补充说明

你在create方法里用User.invite!配合skip_invitation: true的写法是正确的,已经成功创建了带邀请记录的用户,只要拿到单个用户实例调用deliver_invitation,就能正常触发邀请邮件发送逻辑。

内容的提问来源于stack exchange,提问作者Joe Bloggos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:12:31