Ruby on Rails - поле не распознается отношением ActiveRecord - PullRequest
0 голосов
/ 22 марта 2019

У меня есть таблица User для моего приложения, которая содержит список всех пользователей. Эта таблица имеет Boolean field с именем active.

У меня есть этот код для извлечения пользователя:

existing_user = User.where("LOWER(email) = ?", auth_hash['info']['email'].downcase)

И вот что я получаю, когда делаю existing_user.inspect:

User Load (1.9ms)  SELECT "users".* FROM "users" WHERE (LOWER(email) = 'biswanath.chandramouli@gmail.com')
#<ActiveRecord::Relation [#<User id: 4, name: "Biswanath Chandramouli", email: "Biswanath.Chandramouli@gmail.com", last_updated_by: "", admin: true, active: true, last_updated_on: nil, created_at: "2018-10-30 08:14:59", updated_at: "2018-10-30 08:14:59"

Как видите, existing_user имеет свойство active, доступное, как показано выше.

Но этот код не работает:

if(!existing_user.active?)

Приведенный выше вызов выдает эту ошибку:

undefined method `active?' for #<User::ActiveRecord_Relation:0x00007f0a58b2c500> Did you mean? acts_like?

Когда existing_user.inspect показывает active: true, почему вышеприведенный вызов existing_user.active не срабатывает? Пожалуйста, помогите!

Ответы [ 2 ]

7 голосов
/ 22 марта 2019

Я думаю, вы должны использовать if(!existing_user.first.active?).Это будет работать в вашем случае.Где предложение возвращает вам массив, а не объект.В вашем случае existing_user - это массив, а не объект.

0 голосов
/ 22 марта 2019

Этот ответ не по теме, но может сильно вас спасти:

Каждый раз, когда вы звоните по этому номеру existing_user = User.where("LOWER(email) = ?", auth_hash['info']['email'].downcase), он собирает все электронные письма в таблице и ищет правильный.

Я бы предложил сократить электронную почту перед сохранением пользователя и добавить index к нему;

before_save { self.email = self.email.downcase }

, а затем получить пользователя:

user = User.where(email: auth_hash['info']['email'].downcase).first

Попробуйте этот метод, и вы увидите большую разницу в получении данных (которая сейчас 1.9ms)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...