مشكلة في إرجاع القيم من طريقة المساعد في القضبان
-
26-09-2019 - |
سؤال
أرغب في طباعة بعض الكائنات في جدول يحتوي على صفين لكل كائن ، مثل هذا:
<tr class="title">
<td>Name</td><td>Price</td>
</tr>
<tr class="content">
<td>Content</td><td>123</td>
</tr>
كتبت طريقة مساعد في products_helper.rb
, ، بناء على إجابة هذا السؤال.
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>
ماذا علي أن أفعل لجعلها تعمل؟
المحلول
تذكر أن الوظيفة content_tag تُرجع سلسلة. لا يكتب مباشرة إلى الصفحة. إذن ما تفعله مع TDS هو:
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
وفي كتلة ، القيمة الأخيرة هي القيمة التي يتم إرجاعها. هناك سلسلتان حاضرتان ، لكن أول واحد يضيع في الأثير. السلسلة الثانية هي القيمة الأخيرة في الكتلة ويتم إرجاعها.
ما عليك القيام به هو وضع A + بينهما لإضافة الأوتار معًا:
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 ، ما عليك سوى وضع زائد هناك بعد نهاية المحتوى الأول.
لا تنتمي إلى StackOverflow