Как правильно добавить эту модель в метод? - PullRequest
0 голосов
/ 16 сентября 2010

Это метод, который раньше использовался в контроллере, и я думаю, что имеет смысл сделать его методом для модели Contact:

  def colleagues 

    company = Company.find(self.company_id) 

    contacts = company.contacts.collect(&:full_name)

    contacts.each do |contact|
       colleagues = contacts.reject{ |c| c==contact }
    end 

    return colleagues

  end

Каждый Контакт принадлежит Компании. У каждой компании может быть много других контактов. Коллегами по конкретному контакту являются другие члены Компании, к которым принадлежит указанный контакт.

Кажется, я получаю сообщение об ошибке, ошибка в стеке.

Ответы [ 2 ]

2 голосов
/ 16 сентября 2010

Это то, что вы ищете?

class Contact
  belongs_to :company

  def colleagues
    self.company.contacts
  end
end

Если вы не хотите, чтобы вы были включены в список контактов, вы можете использовать reject:

class Contact
  belongs_to :company

  def colleagues
    self.company.contacts.reject { |contact| contact == self }
  end
end

Обновление для вашего последнего комментария:

def colleagues
  self.company.contacts.collect { |contact| contact.full_name }.to_sentence
end

Или еще раз, если вы не хотите включать себя:

def colleagues
  colleagues = self.company.contacts.reject { |contact| contact == self }
  colleagues.collect { |contact| contact.full_name }.to_sentence
end
0 голосов
/ 16 сентября 2010

Попробуйте это:

class Contact
  belongs_to :company
  has_many :colleagues, :through => :company, :source  => :contacts, 
                        :conditions => 'contacts.id != #{id}'
end


class Company
  has_many :contacts
end

Теперь вы можете совершать следующие звонки:

contact.colleagues                              # colleagues list
contact.colleagues.map(&:full_name).to_sentence # colleague names string

Вы можете дополнительно оптимизировать результат следующим образом:

contact.colleagues.all(:select => :full_name).map(&:full_name).to_sentence
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...