2010-04-13 43 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