视图中的块和轨道中的重构

时间:2012-03-22 09:02:41

标签: ruby-on-rails ruby decorator content-tag

我在产品型号中有注释属性,文字“有些东西”。 在我想看的观点中:

<div>
  <span>Something</span>
  <span>Something else</span>
</div>

此外我还有工作代码,但我想要使用装饰器(draper)进行重构,或者使用帮助器。

%div
  - product.notes.split(/,/).each do |e|
    %span= e.strip.capitalize

在装饰者:

def notes_list
  model.notes.split(/,/).each do |e|
    h.content_tag(:span, e.strip.capitalize)
  end
end

观点:

%div
  = product.notes_list

(或帮助者中的类比:

  def notes_list(product)
    product.notes.split(/,/).each do |element|
      content_tag(:span, element.strip.capitalize)
    end
  end

致电:

%div
  = notes_list(product)

但是这会返回

    <div>

 "  
                       ["something", " something else"]
                          "
    </div>

有什么问题?

1 个答案:

答案 0 :(得分:1)

你的notes_list正在返回product.notes.split(/,/)

尝试

def notes_list(product)
  result = product.notes.split(/,/).inject([]) do |result, element|
    result << content_tag(:span, element.strip.mb_chars.capitalize)
  end
  result.join("\n")
end