如何在decorater中避免过多的`h.concat`

时间:2015-12-31 21:51:39

标签: ruby-on-rails decorator draper

我在Decorator类中使用了很多h.concat,如下所示:

  def vote_box(size)
    h.content_tag(:div, class: "vote-box #{size}") do
      h.concat(h.link_to(h.up_vote_phrase_path) do
        h.concat h.content_tag(:span, '', class: 'glyphicon glyphicon-triangle-top vote vote-up', :'aria-hidden' => true)
      end)
      h.concat h.content_tag(:div, '0', class: 'vote-count')
      h.concat h.content_tag(:span, '', class: 'glyphicon glyphicon-triangle-bottom vote vote-down', :'aria-hidden' => true)
    end
  end

首先,我觉得h.concat过多了。 其次,我不喜欢paren do ~ end阻止。

有没有更好的方法来编写这些代码?

1 个答案:

答案 0 :(得分:1)

看起来你的方法并不依赖于Decorator类中的任何东西。 也许将它转移到帮手会有意义吗?然后,更容易访问大部分h方法。

def vote_box(size)
  content_tag(:div, class: "vote-box #{size}") do
    link_to(up_vote_phrase_path) do
      content_tag(:span, '', class: 'glyphicon glyphicon-triangle-top vote vote-up', :'aria-hidden' => true)
    end +
    content_tag(:div, '0', class: 'vote-count') +
    content_tag(:span, '', class: 'glyphicon glyphicon-triangle-bottom vote vote-down', :'aria-hidden' => true)
  end
end