【发布时间】:2017-04-21 09:49:16
【问题描述】:
我有一个相对简单的 Rails 应用程序,带有一个使用 Devise gem 的表单。该表格不需要用户名,但需要电子邮件地址。一切正常,当用户的电子邮件地址全为小写时,页面会将用户引导至下一页。但是,当用户在字符串中输入带有大写字符的电子邮件地址时,我从 Rails 收到以下错误:
NoMethodError at /users
undefined method `uuid' for nil:NilClass
RegistrationsController#create
app/controllers/registrations_controller.rb, line 81
在第 81 行 (email: new_user.email,):
account = Account.create(user: resource)
new_user = User.find_by_email(params[:user][:email])
recurly_account = Recurly::Account.create(
account_code: new_user.uuid,
email: new_user.email,
first_name: new_user.first_name,
last_name: new_user.last_name
)
sign_in new_user
请求参数:
{"utf8"=>"✓",
"authenticity_token"=>"ySBGjHGNwiyeBqGh9nv0N5a8fIJO51bi1nIByev6a21Zh+ncMx5d99cTGKbKWpPvdYmGiBfLX9Gya0qmglrBWg==",
"plan"=>"10day-fmf",
"disc"=>"firstmonthfree10day",
"user"=>{"first_name"=>"asdf", "last_name"=>"asdfsadf", "email"=>"Fjsdlkjs@FLFklsd.com", "password"=>"lsdkjlfkjlskjdf"},
"commit"=>"TRY RISK FREE!",
"controller"=>"registrations",
"action"=>"create"}
--用大写字母记下电子邮件地址
我对这个问题进行了广泛的研究,发现它与电子邮件地址没有正确小写有关。因此,根据我的研究,我将以下代码添加到各种文件中:
# Devise.rb
config.case_insensitive_keys = [:email]
# User.rb
def downcase_email
self.email.downcase!
end
#registrations_controller.rb
def check_email
email = params[:email].downcase
check = User.where(email: email).first
begin
check_recurly = Recurly::Account.find(email)
if check_recurly
recurly_email = "taken"
end
rescue Recurly::Resource::NotFound => e
recurly_email = "available"
end
然而,尽管我尝试过将用户输入的电子邮件地址小写,但大写字母仍然会导致错误!任何人都可以给我的任何帮助将不胜感激! 谢谢
【问题讨论】:
-
这可能会有所帮助:github.com/plataformatec/devise/wiki/… 显然您需要使用:
User.find_for_authentication(email: params[:email])而不是User.where(email: email)
标签: ruby-on-rails ruby email devise