سؤال

أرغب في طباعة بعض الكائنات في جدول يحتوي على صفين لكل كائن ، مثل هذا:

<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 ، ما عليك سوى وضع زائد هناك بعد نهاية المحتوى الأول.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top