我有一个页面,如果用户无法记住他们的子域名网址登录页面,用户可以输入电子邮件,但我无法正确设置。
我在公共租户中有一个带有电子邮件表的帐户表。我收到此错误:未定义的局部变量或#
的方法`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
答案 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}}。
我想添加一步一步的解释。