2010-04-13 22 views
1

从一个辅助方法返回值,我想打印在具有每个对象的2行,像这样的一个表中的某些对象:问题与Rails的

<tr class="title"> 
    <td>Name</td><td>Price</td> 
</tr> 
<tr class="content"> 
    <td>Content</td><td>123</td> 
</tr> 

products_helper.rb写一个辅助方法的基础上,答案的this question

def write_products(products) 
    products.map { 
    |product| 
    content_tag :tr, :class => "title" 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, :class => "content" do 
     content_tag :td, h(product.content) 
     content_tag :td, product.count 
    end 
    }.join 
end 

但是,这并不像预期的那样工作。它只返回最后一个节点 - 最后一个<td>123</td>

我应该怎么做才能使它工作?

回答

2

记住函数content_tag返回一个字符串。它不直接写入页面。所以你与阵做的是这样的:

​​

哪,如果我们评估这部分将是

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_tag。

+0

如果我在两个'content_tag'之间加了一个'+',我得到一个'Internal Server Error':'语法错误,意外的tSYMBEG,期待kDO或'{'或'('' – 2010-04-13 20:57:14

+0

我在括号周围加了括号(content_tag:tr do content_tag(:td,...)+ content_tag(:td,...)结束),这个'content_tag'包含'do'''end'和其他的参数,如下所示:' +(content_tag:tr do ... end)' – 2010-04-14 08:11:32

+0

那有效? – Tilendor 2010-04-14 16:50:23