【发布时间】:2016-03-31 23:30:59
【问题描述】:
以下方法有效并验证已通过电子邮件发送令牌链接的用户。
def login
inv = Invitation.find_by(email: params[:email])
if inv && inv.authenticated?(:invitation, params[:id])
@organization = inv.organization
unless @organization.nil?
render 'profiles/show' and return
else
flash[:danger] = "Error"
redirect_to root_path
end
else
flash[:danger] = "Invalid link"
redirect_to root_path
end
end
然而,这种方法似乎假设一个人 (inv) 在 Invitation 数据库中只能存在一次。情况并非如此,同一个人/电子邮件地址在数据库中可以有多个记录。因此,我需要重写方法来解决这种情况。我怎样才能做到这一点?我可以使用下面第 2 行添加的.all 并使用.each吗?
def login
inv = Invitation.find_by(email: params[:email]).all
if inv
inv.each do |person|
if person.authenticated?(:invitation, params[:id])
@organization = person.organization
unless @organization.nil?
render 'profiles/show' and return
else
flash[:danger] = "Error"
redirect_to root_path and return
end
end
flash[:danger] = "Invalid link"
redirect_to root_path
end
else
flash[:danger] = "Invalid link"
redirect_to root_path
end
end
错误信息:
此代码会产生下面的错误消息,但我不确定要使用 .all 之外的其他内容:
NoMethodError: undefined method `all' for #<Invitation:0x0000000b869ee8>
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 methods controller