使用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_by
或where
inv = Invitation.find_all_by(email: params[:email])
要么
inv = Invitation.where(email: params[:email])