简单的rails搜索以检查是否存在电子邮件,如果找到,则触发电子邮件发送到输入的电子邮件

时间:2016-07-07 19:34:22

标签: ruby-on-rails ruby email

我有一个页面,如果用户无法记住他们的子域名网址登录页面,用户可以输入电子邮件,但我无法正确设置。

我在公共租户中有一个带有电子邮件表的帐户表。我收到此错误:未定义的局部变量或#

的方法`account'

以下是我在搜索页面上的内容

find_login.html.erb:

    <div class="form-inputs">
     <%= form_tag(find_login_path, :method => "get") do %>
       <%= text_field_tag :search, params[:search], placeholder: "Email Address", class: "form-control" %>
       <%= submit_tag "Continue", :name => nil, class: "btn btn-default" %>
     <% end %>   
    </div>

accounts_controller.rb:

def find_login
    @accounts  = Account.find_by_email(params[:search].to_s.downcase)

    unless @accounts.nil?
        flash[:success] = "Email found! An email has been sent."
        UserMailer.login_recovery(account).deliver
      else
        flash[:error] = "Email NOT found!"  if params[:search] && !params[:search].empty?
    end
end

user_mailer.rb:

def login_recovery(account)
  @account = account
  mail  to: @account.email, subject: 'Your login recocery'
end

2 个答案:

答案 0 :(得分:2)

您将找到的帐户存储在实例变量@accounts中,但是您将局部变量account传递给邮件程序。

只需更改

UserMailer.login_recovery(account).deliver

UserMailer.login_recovery(@accounts).deliver

或者作为方法的重写:

def find_login
  query = params[:search].presence

  if query
    account = Account.find_by_email(query.downcase)

    if account
      UserMailer.login_recovery(account).deliver
      flash[:success] = "Email found! An email has been sent."
    else
      flash[:error] = "Email NOT found!"
    end
  end
end

答案 1 :(得分:0)

首先让我们重新发出此错误消息:

account

它说变量def find_login @accounts = Account.find_by_email(params[:search].to_s.downcase) unless @accounts.nil? flash[:success] = "Email found! An email has been sent." UserMailer.login_recovery(account).deliver else flash[:error] = "Email NOT found!" if params[:search] && !params[:search].empty? end end 未定义,所以让我们看看你的方法:

@

在ruby中,@accounts = Account.find_by_email(params[:search].to_s.downcase)表示实例变量,而普通变量没有任何特殊符号。

因此,您检查@accounts是否存在帐户。请注意,您使用@accounts来存储查询结果!

接下来,您检查nil是否为login_recovery。到目前为止一切都很好。您的帐户(如果找到)将存储在该变量中。

现在,您以account为参数调用account@accounts@accounts不同,因为它是一个普通变量且名称不同。这就是抛出错误的地方。

正如@ https://developers.facebook.com/docs/plugins/like-button在回答中所说,使用{{1}}。

我想添加一步一步的解释。