代码之家  ›  专栏  ›  技术社区  ›  True Soft

从Rails中的助手方法返回值时出现问题

  •  1
  • True Soft  · 技术社区  · 14 年前

    我想在一个表中打印一些对象,每个对象有两行,如下所示:

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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Tilendor    14 年前

    记住,函数content_标记返回一个字符串。它不会直接写入页面。因此,您对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
    

    在一个块中,最后一个值是返回的值。有两个字符串,但第一个字符串在以太中丢失了。第二个字符串是块中的最后一个值,并返回。

    您需要做的是在它们之间放置一个+来将字符串添加到一起:

    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_标记结束后在其中放置一个加号。