首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用Mailer在Rails中发送链接

无法用Mailer在Rails中发送链接
EN

Stack Overflow用户
提问于 2013-06-25 11:56:23
回答 2查看 161关注 0票数 1

我有一个应用程序,发送邀请电子邮件,其中包含一个链接注册。但是寄存器链接会出现错误。如果注册链接不存在,电子邮件将发送。

代码语言:javascript
复制
NoMethodError in Invitations#create
undefined method `accept_referral_invitation_url' for #(#(Class:0xadd8c90):0xb5d868cc)

此错误发生在这一行。

代码语言:javascript
复制
= accept_referral_invitation_url(@invitation.invite_token)

InvitationsController

代码语言:javascript
复制
class InvitationsController < ApplicationController
    def new
        @invitation = Invitation.new
    end

  def create
  @invitation = current_user.invitations.new(params[:invitation])

    if @invitation.valid?
      @invitation.save
      redirect_to root_url, :notice => "Invitation sent!"
      UserMailer.invitation(@invitation).deliver
    else
      render "new", :notice => "Somehting went wrong!"
    end
end


  def accept_referral
      @invitation = Invitation.find_by_invite_token(params[:invite_token])
      @invitation.accepted_at = Time.zone.now
      @invitation.save!
      redirect_to root_url, :notice => "Success!"
  end

end

用户邮箱

代码语言:javascript
复制
class UserMailer < ActionMailer::Base
  def invitation(invitation)
    @invitation = invitation
    mail(:to => invitation.email, :subject => "You're invited", :from => 'alain@lootfly.com')
  end
end

invitation.html.haml (被发送的消息)

代码语言:javascript
复制
You have been cordially invited to join beta.
Click this link to sign up!
= accept_referral_invitation_url(@invitation.invite_token)
= accept_referral_invitation_url(invite_token: @invitation.invite_token)
# I TRIED BOTH OF THOSE LINKS^^^^ TO NO AVAIL!!!!!!!

邀请模型

代码语言:javascript
复制
  create_table "invitations", :force => true do |t|
    t.integer  "user_id"
    t.text     "email"
    t.text     "invite_token"
  end

编辑: Rake路由

代码语言:javascript
复制
        invitations GET    /invitations(.:format)                invitations#index
                    POST   /invitations(.:format)                invitations#create
     new_invitation GET    /invitations/new(.:format)            invitations#new
    edit_invitation GET    /invitations/:id/edit(.:format)       invitations#edit
         invitation GET    /invitations/:id(.:format)            invitations#show
                    PUT    /invitations/:id(.:format)            invitations#update
                    DELETE /invitations/:id(.:format)            invitations#destroy
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-25 17:16:54

您可能在config/ this es.rb中缺少了这一点。

代码语言:javascript
复制
resources :invitations do
  get 'accept_referral', :on => :collection 
end

,这将生成一个GET目标,如接受邀请的/请柬/ accept _referral,因此您可以这样做。

代码语言:javascript
复制
accept_referral_invitations_url()

现在,要获得邀请代码,请执行以下操作:

代码语言:javascript
复制
accept_referral_invitations_url(:invite_token => @invitation.invite_token)

,这将导致一个类似于/invitations/accept_referral?invite_token=blahblahblah的URL

请注意,我在集合中添加了GET目标(而不是成员),因此不需要传递@ itself对象本身。而且,因为它是一个集合目标,所以使用invitations_url (复数)而不是invitation_url。

希望这能帮上忙!

票数 2
EN

Stack Overflow用户

发布于 2013-06-25 17:21:14

错误中的Invitations对象是可疑的,因为Rails通常不会创建这个名称的类(即没有限定符的复数)。您应该检查您的Invitation类定义是否不正确地使用该对象名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17296684

复制
相关文章

相似问题

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