我有我的自定义演示者
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']来显示用户名
答案 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?