У меня есть относительно простое приложение Rails с формой, использующей драгоценный камень Devise. Форма не требует имени пользователя, но требует адрес электронной почты. Все работает нормально, и страница направляет пользователя на следующую страницу, когда их адрес электронной почты является строчным. Тем не менее, когда пользователь вводит адрес электронной почты с символом верхнего регистра в строке, я получаю следующее сообщение об ошибке с Rails: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"=>"[email protected]", "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
Однако, несмотря на все мои попытки downcasing адреса электронной почты, введенный пользователем, прописные буквы по-прежнему вызывают ошибку! Любая помощь, которую могли бы мне дать, была бы очень признательна! Благодаря
это может помочь: https://github.com/plataformatec/devise/wiki/How-To:-Use-case-insensitive-emails appareantly вам нужно использовать: 'User.find_for_authentication (email: params [: email]) 'вместо' User.where (email: email) ' –