У меня есть 3 модели: Users has_one Service и Users Has_many Phones (проверено или нет, уничтожено или нет)
Class Phone < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_one :service
has_many :phones
has_many :verified_phones, -> {where('verified_at IS NOT NULL AND destroyed_at IS NULL')}, class_name: 'Phone'
end
class Service < ActiveRecord::Base
belongs_to :user
has_many :phones, through: :user
has_many :verified_phones, through: :user
end
Я хочу определить TS-индекс для модели Service. Мне нужен логический атрибут, представляющий Службу, у пользователя которой есть один или несколько подтвержденных телефонов.
Итак, после прочтения этого сообщения я попробовал:
join verified_phones
has 'COUNT(verified_phones.id) > 0', as: :user_phone_verified, type: :boolean, facet: true
но пришлите мне ошибку «Неизвестный столбец 'verify_phones.id' в 'списке полей'» (такая же ошибка произошла в сообщении)
Потом я попробовал
join verified_phones
has 'COUNT(phones.id) > 0', as: :user_phone_verified, type: :boolean, facet: true
-> but result are wrong : attribute is true for every user that have a phone, verified or not, destroyed or not.
Потом я попробовал
join phones
has 'COUNT(phones.verified_at IS NOT NULL AND phones.destroyed_at IS NULL) > 0', as: :user_phone_verified, type: :boolean, facet: true
-> та же проблема: атрибут верен для каждого пользователя, у которого есть телефон, подтвержденный или нет, уничтоженный или нет.
Я плохо разбираюсь в синтаксисе SQL, может ли кто-нибудь помочь мне решить эту проблему? Спасибо