使用find_by方法检索多个记录

以下方法适用于通过电子邮件发送令牌链接的用户并对其进行身份validation。

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行添加.each并使用.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 # 

你需要使用find_all_bywhere

 inv = Invitation.find_all_by(email: params[:email]) 

要么

 inv = Invitation.where(email: params[:email])