我在rails中有这个循环
- @companies.people.each do |person|
%p
Hello there :
= "#{person.manager.name} (#{person.manager.email})"
但我只想打印经理名字一次.....但很多人都有同样的经理,他们正在打印欺骗......任何想法如何不在这里打印欺骗
答案 0 :(得分:5)
你不愿意这样做:
@companies.managers do |manager|
...
因此,您需要使用managers
方法修改基础模型(公司?)。无论是通过范围,模型关系还是alfonso的强力回答,我们都没有足够的信息来确定。但无论如何,这种逻辑最好隐藏在模型中,而不是在视图中公开。
答案 1 :(得分:3)
class Company
scope :managers, ->(){where(manager: true)}
end
module EmployeeListViewHelper
def manager_list
Company.managers.each do |m|
content_tag(:p, "Hello There : #{m.name} #{m.email}")
end
end
end
然后在你看来就是这个:
= manager_list
答案 2 :(得分:1)
嗯,看起来你可能会以错误的方式解决这个问题。如果您不希望每个人都重复经理的姓名,您可能需要将经理人员分组。
然后你的观点看起来应该是等级的,经理下面的人也应该在视觉上放置。
答案 3 :(得分:1)
您可以使用uniq
方法执行此操作:
@companies.people.map{|p| p.manager}.uniq