2015-02-20 2 views
0

У меня есть модель, которая имеет настраиваемое свойство:Найти модель с помощью настраиваемого свойства

class User < ActiveRecord 
    def my_custom_field 
    # .... 
    end 
end 

Мне нужно найти пользователь, который имеет определенную my_custom_field. Я не могу это сделать:

User.where(my_custom_field: '123')[0] 

Однако, я могу это сделать:

User.all.select { |x| x == '123'}[0] 

, но это не является эффективным производительность мудрым. Что более эффективно?

+0

это называется виртуальным атрибутом –

+0

@ Энтони, как вы думаете? –

ответ

3

Я думаю, что вы говорите, что my_custom_field не хранится в базе данных. В этом случае вы ищете detect.

users.detect { |user| user.my_custom_field == '123' } 

Использование detect вызовет цикл, чтобы остановить итерации как только результат будет найден и вернуть его.

+0

Чтобы пользователям потребовался User.all, это то же самое, что и я, но я хотел бы получить более эффективное решение, которое не требует перехода на всех пользователей на клиенте. –

+0

Если атрибут отсутствует в базе данных, вы не можете сделать ничего, кроме итерации по коллекции в памяти. Возможно, поможет более подробный/конкретный вопрос/сценарий? – pdobb

Смежные вопросы