Узнайте, содержит ли модель ассоциации, описанные в массиве с идентификаторами - PullRequest
1 голос
/ 16 мая 2019

У меня есть следующие модели:

class Person < ApplicationRecord
    has_many :pets
end

class Pet < ApplicationRecord
    belongs_to :person
end

Теперь у меня есть массив с идентификаторами определенных питомцев, и я хочу проверить, владеет ли он всеми ими.

_pets = [1, 4, 5]

person.owns(_pets)

Итак, теперь я хочу узнать, как проверить, владеет ли пользователь ВСЕМИ этими питомцами.Это означает, что я хочу выяснить, является ли _pets подмножеством всех его питомцев.

class Person < ApplicationRecord
    has_many :pets

    def owns(_pets)
        # ???
        # Returns true or false
    end
end

class Pet < ApplicationRecord
    belongs_to :person
end

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Что-то вроде этого:

def owns(_pets)
  pets.where(id: _pets).size == _pets.size
end
0 голосов
/ 17 мая 2019

Я бы предложил этот вариант.

class Person < ApplicationRecord
    has_many :pets

    def owns?(_pets)
        pets_ids = pets.pluck(:id)
        _pets.all? { |id| pets_ids.include? id }
    end
end

Когда _pets = [1, 4, 5], вы можете иметь следующие случаи:

_pets =    [1, 4, 5]    # to checked
pets_ids = [1, 4]       # from pluck
#=> false


_pets =    [1, 4, 5]    # to checked
pets_ids = [1, 4, 5]    # from pluck
#=> true


_pets =    [1, 4, 5]    # to checked
pets_ids = [1, 4, 5, 6] # from pluck
#=> true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...