1

我正在尝试借助 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

谁能告诉我这是为什么?

4

1 回答 1

4

如果没有显式调用 return,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 %>
于 2012-12-05T17:14:58.260 回答