Лучший способ получить одно поле в одной строке кода с ActiveRecord (Rails 4)
Я просто хочу получить скалярные данные (например, int, string и т. Д.) Из одного поля строки. Если в БД нет строки, я хочу, чтобы она была нулевой.
Строка кода ниже работает хорошо, если есть строка:
User.select(:email).where(***).first.email
Но нет, он вызовет "NoMethodError: неопределенный метод" email "для nil:NilClass".
Поэтому я должен использовать метод "попробовать" ActiveSupport.
User.select(:email).where(***).first.try(:email)
Или я должен сначала использовать pluck + Array#.
User.select(:email).where(***).pluck(:email).first
Но оба эти кода немного длинны для меня.
Есть ли лучший способ сделать это? Если есть интерфейс, как показано ниже, я буду очень счастлив.
User.where(***).field(:email)
# => returns "abc@example.com" or nil
1 ответ
Я бы сделал
(user = User.select(:email).where(***).first) && (user.email)
Это вернет либо адрес электронной почты пользователя, либо ноль, если нет пользователя.
Если вам нужна только одна строка, вы должны использовать find_by
. Таким образом, вы можете провести рефакторинг кода вот так.
User.find_by(***).try(:email)