Помните, что функция content_tag возвращает строку. Он не пишет прямо на страницу. Итак, что вы делаете с TD, это:
content_tag :tr do
content_tag :td do
link_to h(product.name), product, :title=>product.name
end
content_tag :td do
product.price
end
end
Что, если мы оценим это частично, будет
content_tag :tr do
"<td title='Ducks'> <a ...>Ducks</a></td>"
"<td>19</td>"
end
И в блоке последнее значение является тем, которое возвращается. Есть две строки, но первая просто теряется в эфире. Вторая строка является последним значением в блоке и возвращается.
Что вам нужно сделать, это поместить + между ними, чтобы сложить вместе строки:
content_tag :tr do
(content_tag(:td) do
link_to h(product.name), product, :title=>product.name
end) + #SEE THE PLUS IS ADDED HERE
(content_tag(:td) do
product.price
end)
end
Вы должны сделать то же самое на уровне TR, просто добавьте туда плюс после окончания первого тега content_