NoMethodError (未定义的方法 'deliver_invitation') 设计不可吸引的轨道



你好,我有一个应用程序,邀请用户作为与会者

在与会者控制器中,当创建与会者时,创建了用户,但没有向系统发送邀请

与会者_控制器.rb

def create
@attendee = Attendee.new(attendee_params)
@user = User.invite!({email: "#{@attendee.email}"}, current_user) do |u|
u.skip_invitation = true
end 
@attendee.user_id = @user.id
respond_to do |format|
if @attendee.save
format.html { redirect_to meeting_url(@attendee.meeting), notice: "Attendee was successfully created." }
format.json { render :show, status: :created, location: @attendee }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @attendee.errors, status: :unprocessable_entity }
end
end
end

在同一个控制器中,我有一个send_invite

def send_invite
@attendee = Attendee.find(params[:attendee_id])
User.where(id: @attendee.user_id).deliver_invitation
redirect_to meeting_url(@attendee.meeting)
end

当我通过按钮点击它时,我会得到

与会者控制器#send_invite中的NoMethodError#<的未定义方法"delivery_invitation";ActiveRecord::关系

[devise_invitable][1]明确说明

如果您想创建邀请但不发送,可以将skip_invitation设置为true。

user = User.invite!(email: 'new_user@example.com', name: 'John Doe') do |u|
u.skip_invitation = true
end
# => the record will be created, but the invitation email will not be sent

当您自己生成accept_user_invitation_url时,必须使用raw_invitation_token。当您邀请用户时,此值暂时可用,收到后将解密。

accept_user_invitation_url(invitation_token: user.raw_invitation_token)

使用skip_invitation时,还必须在向用户发送令牌时设置invitation_sent_at字段。否则,当用户尝试接受邀请时,将产生"无效邀请令牌"错误。您可以设置列,也可以调用delivery_invitation发送邀请并设置列:

user.deliver_invitation

我错过了什么?[1] :https://github.com/scambra/devise_invitable#send-邀请-

我猜.deliver_invitation是用户模型上的一个实例方法。(通过devise_invitable(
在这种情况下,您可能想要这样的东西:

User.where(id: @attendee.user_id).each do |user|
user.deliver_invitation
end

假设deliver_invitation是User模型的一个实例方法,您可以修改您的send_invite方法,如下所示:

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

最新更新