3

我想要一个看起来像 的按钮,其中Log in with [FB]字体[FB]真棒图标。(请注意,此图标出现在末尾)。为此,这有效:

= form_tag my_path, :method => :post do
  = button_tag do
    Log in with
    %i.icon-facebook

我想通过创建一个新的辅助方法来干燥它:

  def button_to_with_icon(path, text, button_class, icon)
    form_tag path, :method => :post do
      button_tag(:class => button_class) do
        text
        content_tag :i, "" , :class => icon.to_sym
      end
    end
  end

但是,该text参数不会呈现在 HTML 中。我该如何解决这个问题?

4

2 回答 2

10

button_tag块将使用那里返回的内容作为文本。在这里,您隐含地返回content_tag,并抛出文本。

你应该concat在你的content_tag块内使用:

button_tag do
  concat text
  concat content_tag(:i, nil, :class => icon.to_sym)
end
于 2013-03-19T14:55:05.607 回答
0

在您的代码中,返回值text只是被浪费了。您必须返回两者的串联,content_tagand text

def button_to_with_icon(path, text, button_class, icon)
  form_tag path, :method => :post do
    button_tag(:class => button_class) do
      text + content_tag(:i, "" , :class => icon.to_sym)
    end
  end
end

红宝石方法不是 ERB :-)

于 2013-03-19T14:51:00.337 回答