如何在Presenter中显示名称列表?

时间:2013-09-17 16:18:11

标签: ruby-on-rails ruby presenter

我有我的自定义演示者

class ShiftPresenter
  def initialize(shift, template)
    @shift = shift
    @template = template
  end

  def h
    @template
  end

  def users_list
    logs = ShiftLog.by_shift(@shift)
    names = logs.map do |log|
      log.cardiologist.name
    end
    h.content_tag :div, names unless names.empty?
  end
end

#index查看

- present shift do |shift_presenter|
  = shift_presenter.user_list

如何使用li代替['tom','jerry']来显示用户名

2 个答案:

答案 0 :(得分:0)

您可以将此添加到演示者方法中:

def users_list
  logs = ShiftLog.by_shift(@shift)
  names = logs.map(&:cardiologist).map(&:name)#.compact.uniq # you can add this if you want
  h.content_tag :div do
    h.content_tag :ul do
      ul_content = ''.html_safe
      names.each do |name|
        ul_content << h.content_tag :li, name
      end
      ul_content
    end
  end

它的作用是使用return语句作为块:最后使用/返回的对象将放在content_tag中。

答案 1 :(得分:0)

尝试将names方法中的users_list的每个元素包装到<li>标记中,并将它们连接成一个字符串。为此,您需要更改此行:

h.content_tag :div, names unless names.empty?

进入这个:

h.content_tag :div, names.map{|str| '<li>' + str + '</li>'}.join unless names.empty?