Получить значение атрибута при переборе массива объектов (получение нулей) - PullRequest
0 голосов
/ 24 января 2012

В моей Guest модели у меня есть этот метод для возврата списка идентификаторов из связанной модели:

def self.people_list(consultant_id)
  # returns an array of ids of people who attended parties for a given consultant
  people = self.select(:person_id).joins('INNER JOIN parties ON guests.party_id = parties.id').where('parties.consultant_id = ?', consultant_id).collect{ |g| g.person_id }
end

person_id - это поле в модели Guest. Но то, что я получаю, это массив нулей. С консоли rails я могу сказать, что запрос правильный, и он возвращает правильное количество объектов. Я просто не получаю их в массив.

Спасибо за помощь.

P.S., Если это помогает / имеет значение, у Консультантов много сторон, у которых много гостей. У гостей есть person_id, который присоединяется к таблице People. Я пытаюсь найти все person_ids из таблицы «Гости», которые были на вечеринке для данного консультанта.

Из консоли (после изменения синтаксиса рельсовых ассоциаций, как указано ниже)

Guest Load (0.3ms)  SELECT person_id FROM `guests` INNER JOIN `parties` ON `parties`.`id` = `guests`.`party_id` WHERE (parties.consultant_id = 1)
=> [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil] 

Ответы [ 2 ]

0 голосов
/ 24 января 2012

Итак, я понял, что у меня есть attr_accessor: people_id, из-за чего возникла ноль.Мне нужно оставить это для другой стороны системы, но я смог получить правильные значения, заменив g.person_id на g [: person_id].

Я не совсем понимаю, почему, но этоработает ...

0 голосов
/ 24 января 2012

На мой взгляд, вы должны подходить к этому как к консультанту, являющемуся основным объектом.

def attendees
  @attendees = []
  parties.each do |p|
    @attendees << p.guests.collect(&:person_id)
  end
  @attendees
end

Затем вызовите этот метод для объекта консультанта.

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