使用content_tag时,Ruby on Rails中的html表奇怪呈现

时间:2012-12-05 17:09:00

标签: html ruby-on-rails ruby html-table content-tag

我试图在content_tag方法的帮助下在Ruby on Rails中构建一个表。

当我运行时:

def itemSemanticDifferential(method, options = {})

  if options[:surveyQuestion].any? then
    @template.content_tag(:tr) do
      @template.content_tag(:td, options[:surveyQuestion], :colspan => 3)
    end
  end

  @template.content_tag(:tr) do
    @template.content_tag(:th, options[:argument0])
  end
end

只渲染第二部分:

@template.content_tag(:tr) do
  @template.content_tag(:th, options[:argument0])
end

谁能告诉我为什么会这样?

1 个答案:

答案 0 :(得分:4)

如果没有显式调用返回值,Ruby Rails将返回它使用的最后一个变量。 (例如:)

def some_method(*args)
  a = 12
  b = "Testing a String"
  # ...
  3
end # This method will return the Integer 3 because it was the last "thing" used in the method

使用数组返回所有content_tag(警告:此方法将返回一个数组,而不是您期望的content_tag,您需要循环它):

def itemSemanticDifferential(method, options = {})

  results = []

  if options[:surveyQuestion].any? then
    results << @template.content_tag(:tr) do
      @template.content_tag(:td, options[:surveyQuestion], :colspan => 3)
    end
  end

   results << @template.content_tag(:tr) do
    @template.content_tag(:th, options[:argument0])
  end

  return results # you don't actually need the return word here, but it makes it more readable
end

正如问题作者所说,你需要循环结果,因为它是一个content_tags数组。此外,您需要使用.html_safe将content_tags输出为HTML(而不是字符串)。

<% f.itemSemanticDifferential(:method, options = {}).each do |row| %>
  <%= row.html_safe %>
<% end %>