这是一种以前在控制器中的方法,我认为将它作为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
每个联系人都属于公司。每个公司可能有许多其他联系人。特定联系人的同事是指定联系人所属的公司的其他成员。
我似乎得到了一个错误,一个堆栈到深度错误。
答案 0 :(得分:2)
这是你在找什么?
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
答案 1 :(得分:0)
试试这个:
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