【问题标题】:How to present list of names in Presenter?如何在 Presenter 中显示姓名列表?
【发布时间】:2013-09-22 04:32:47
【问题描述】:

我有我的自定义演示者

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

【问题讨论】:

  • 哦,我明白了。那么试着把h.content_tag :div, names unless names.empty?改成h.content_tag :div, names.map{|str| '<li>' + str + '</li>'}.join unless names.empty?

标签: ruby-on-rails ruby presenter


【解决方案1】:

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

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

进入这个:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不幸的是,这没有任何回报
    • 还是同样的问题,只在我return names时有效
    • 你有没有看到你调用了shift_presenter.user_list并且你实现了users_list方法(注意这里的复数)。也许是错字?
    • 也许我应该将该逻辑移到模型中?
    • 不不不,把它留在你的演示者中(很高兴看到有人在使用它!)。好的,我发现出了什么问题,我会在一秒钟内更新我的答案
    猜你喜欢
    • 2023-03-07
    • 2021-01-15
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多