我如何删除红宝石中的欺骗

时间:2012-01-11 01:09:23

标签: ruby-on-rails ruby loops

我在rails中有这个循环

 - @companies.people.each do |person|
  %p
    Hello there :
    = "#{person.manager.name} (#{person.manager.email})"

但我只想打印经理名字一次.....但很多人都有同样的经理,他们正在打印欺骗......任何想法如何不在这里打印欺骗

4 个答案:

答案 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