#ruby-on-rails
#ruby-on-rails
Вопрос:
Я не эксперт по rails, но я хочу знать, как я могу найти пользователя по его электронной почте, как я получаю ранее в параметрах. amp; в разделе else я хочу создать нового пользователя, используя эти параметры
def google
user = User.find_by email: user[:email]
if user
user.generate_new_authetication_token
json_response "User Information amp; already exist" , true, {user: user}, :ok
else
??????????
end
if user.save
json_response "Signed up Successfully ", true, {user: user}, :ok
else
json_response "something wrong ", false, {}, :unprocessable_entity
end
end
И еще одна частная функция, из которой я получаю пользовательские параметры
private
def google_params
params.require(:user).permit(:uid , :email )
end
Ответ №1:
Вы можете использовать find_or_initialize_by
метод. ссылка
Это для вас, ваш случай
def google
user = User.find_or_initialize_by(email: user[:email])
if user.persisted?
user.generate_new_authetication_token
json_response "User Information amp; already exist" , true, {user: user}, :ok
else
# ??????????
end
if user.save
json_response "Signed up Successfully ", true, {user: user}, :ok
else
json_response "something wrong ", false, {}, :unprocessable_entity
end
end
Я надеюсь, что это должно сработать.
Комментарии:
1. я получил эту ошибку здесь «#<NoMethodError: неопределенный метод `[]’ для nil: NilClass>»,
2. на самом деле я просто хочу убедиться, присутствует ли мой пользователь в этом электронном письме или нет, если да, то я хочу показать сообщение, иначе я добавлю некоторые дополнительные значения атрибутов, а затем сохраню это
3. Пожалуйста, измените
user[:email]
наgoogle_params[:email]
.