мне нужно получить идентификатор пользователя из результата запроса

Вы переопределяете res в своей функции connection.query(insertQuery, [.....], function(err, res, rows) { ...}).

То, что res перекрывает res с вашего экспресс-маршрутизатора в рамках этой функции

0
задан alphons 19 January 2019 в 19:32
поделиться

2 ответа

Материализованный where вернет коллекцию, так что вы можете получить первую запись с помощью .first

User.where(:user_name => "john").first&.id

Или использовать find_by, которая вернет первую запись, которая удовлетворяет условию.

User.find_by(:user_name => "john")&.id
0
ответ дан Fabio 19 January 2019 в 19:32
поделиться

Если вы действительно пытаетесь получить идентификатор (то есть не используете какие-либо другие атрибуты объекта), обычно лучше сформулировать это как .pluck . Это требует меньше времени для создания экземпляра ActiveRecord и заставляет работу запроса лучше использовать индексы вашей базы данных. Пока User#user_name уникален (и я надеюсь на это!), Он будет возвращать массив длины 1.

User.where(user_name: "John").first.&id 
   # SELECT "users".* FROM "users" WHERE "users"."user_name" = "John" 
   # ORDER BY "users" ASC LIMIT 1
   # => 1 or nil

User.where(user_name: "John").pluck(:id).first
   # SELECT "users"."id" FROM "users" WHERE "users"."user_name" = "John"
   # => 1 or nil

К сожалению, find_by и его помощники не работают таким образом с pluck, и оба эти утверждения вместо этого приводят к ошибкам

User.find_by(user_name: "John").pluck(:id)
User.find_by_user_name("John").pluck(:id)
0
ответ дан Justin P. 19 January 2019 в 19:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: