Найти пользователя по полученным параметрам

#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] .