我有一个应用程序,发送邀请电子邮件,其中包含一个链接注册。但是寄存器链接会出现错误。如果注册链接不存在,电子邮件将发送。
NoMethodError in Invitations#create
undefined method `accept_referral_invitation_url' for #(#(Class:0xadd8c90):0xb5d868cc)此错误发生在这一行。
= accept_referral_invitation_url(@invitation.invite_token)InvitationsController
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用户邮箱
class UserMailer < ActionMailer::Base
def invitation(invitation)
@invitation = invitation
mail(:to => invitation.email, :subject => "You're invited", :from => 'alain@lootfly.com')
end
endinvitation.html.haml (被发送的消息)
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!!!!!!!邀请模型
create_table "invitations", :force => true do |t|
t.integer "user_id"
t.text "email"
t.text "invite_token"
end编辑: Rake路由
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发布于 2013-06-25 17:16:54
您可能在config/ this es.rb中缺少了这一点。
resources :invitations do
get 'accept_referral', :on => :collection
end,这将生成一个GET目标,如接受邀请的/请柬/ accept _referral,因此您可以这样做。
accept_referral_invitations_url()现在,要获得邀请代码,请执行以下操作:
accept_referral_invitations_url(:invite_token => @invitation.invite_token),这将导致一个类似于/invitations/accept_referral?invite_token=blahblahblah的URL
请注意,我在集合中添加了GET目标(而不是成员),因此不需要传递@ itself对象本身。而且,因为它是一个集合目标,所以使用invitations_url (复数)而不是invitation_url。
希望这能帮上忙!
发布于 2013-06-25 17:21:14
错误中的Invitations对象是可疑的,因为Rails通常不会创建这个名称的类(即没有限定符的复数)。您应该检查您的Invitation类定义是否不正确地使用该对象名称。
https://stackoverflow.com/questions/17296684
复制相似问题