1

我有我的自定义演示者

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']来显示用户名

4

2 回答 2

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 中。

于 2013-09-17T16:25:46.960 回答
0

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

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

进入这个:

h.content_tag :div, names.map{|str| '<li>' + str + '</li>'}.join unless names.empty?
于 2013-09-17T17:40:41.743 回答