首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NoMethodError (未定义方法`deliver_invitation')设计可访问的rails

NoMethodError (未定义方法`deliver_invitation')设计可访问的rails
EN

Stack Overflow用户
提问于 2022-08-31 07:12:18
回答 2查看 30关注 0票数 0

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

在与会者控制器中,当创建与会者时,将创建用户,但不向系统发送邀请。

attendees_controller.rb

代码语言:javascript
复制
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

代码语言:javascript
复制
 def send_invite
    @attendee = Attendee.find(params[:attendee_id])
    User.where(id: @attendee.user_id).deliver_invitation
    redirect_to meeting_url(@attendee.meeting)
  end

当我按下按钮时

NoMethodError在AttendeesController#send_invite中用于#

devise_invitable清楚地指出

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

代码语言:javascript
复制
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。此值在邀请用户时暂时可用,并在收到时将被解密。

代码语言:javascript
复制
accept_user_invitation_url(invitation_token: user.raw_invitation_token)

使用skip_invitation时,还必须在向用户发送令牌时设置invitation_sent_at字段。如果不这样做,用户尝试接受邀请时将产生“无效邀请令牌”错误。可以设置列,也可以调用deliver_invitation发送邀请并设置列:

代码语言:javascript
复制
user.deliver_invitation

我少了什么? 1:https://github.com/scambra/devise_invitable#send-an-invitation-

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-31 07:45:30

我想.deliver_invitation是用户模型上的一个实例方法。(通过devise_invitable)。

在这种情况下,您可能需要这样的东西:

代码语言:javascript
复制
User.where(id: @attendee.user_id).each do |user|
   user.deliver_invitation
end
票数 1
EN

Stack Overflow用户

发布于 2022-09-02 05:58:27

假设deliver_invitation是用户模型的实例方法,您可以修改您的send_invite方法如下:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73552122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档