Problem mit Werten aus einer Hilfsmethode in Rails Rückkehr
-
26-09-2019 - |
Frage
Ich möchte einige Objekte in einer Tabelle drucken, mit 2 Zeilen pro Objekt, wie folgt aus:
<tr class="title">
<td>Name</td><td>Price</td>
</tr>
<tr class="content">
<td>Content</td><td>123</td>
</tr>
Ich schrieb eine Hilfsmethode in products_helper.rb
, basierend auf der Antwort von diese Frage .
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
Aber das funktioniert nicht wie erwartet. Es gibt nur den letzten Knoten - die letzten <td>123</td>
Was soll ich tun, es funktioniert?
Lösung
Denken Sie daran, die Funktion content_tag gibt einen String zurück. Es schreibt nicht direkt auf die Seite. Also, was Sie mit dem TDs tun, ist dies:
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
Welche wenn wir bewerten würde dies teilweise sein
content_tag :tr do
"<td title='Ducks'> <a ...>Ducks</a></td>"
"<td>19</td>"
end
Und in einem Block, der letzte Wert ist derjenige, der zurückgegeben wird. Es gibt zwei Saiten vorhanden, aber die erste wird im Äther nur verloren. Die zweite Zeichenfolge ist der letzte Wert in dem Block und zurückgegeben wird.
Was Sie tun müssen, ist Platz ein + zwischen ihnen die Saiten hinzuzufügen zusammen:
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
Sie müssen das gleiche auf der TR-Ebene tun, legen sie lediglich ein Plus dort nach dem Ende des ersten content_tag.