我试图在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
谁能告诉我为什么会这样?
答案 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 %>