代码之家  ›  专栏  ›  技术社区  ›  maček

带有Rails的View helper返回错误的值[Rails,Ruby]

  •  1
  • maček  · 技术社区  · 15 年前

    我试图写一个视图助手,但它没有返回正确的东西。

    def table_layout_for(object, *attrs)
      content_tag :table, :class => "layout" do
        for a in attrs
          content_tag :th do
            object.class.human_attribute_name(a)
          end
          content_tag :td do
            object.send(a) if object.respond_to?(a)
          end
        end
      end
    end
    

    此问题:

    <%= table_layout_for(@user, :email, :full_name, :business_name, :phone_number) %>
    

    [:email, :full_name, :business_name, :phone_number]
    

    我想退货:

    <table class="layout"> 
      <tr> 
        <th>Email</th> 
        <td>paulmacek@gmail.com</td> 
      </tr> 
      <tr> 
        <th>Full name</th> 
        <td>Paul Macek</td> 
      </tr> 
      <tr> 
        <th>Business name</th> 
        <td>2bynight</td> 
      </tr> 
      <tr> 
        <th>Phone number</th> 
        <td>555-423-1245</td> 
      </tr> 
    </table>
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   shingara    15 年前

    这是因为块在content\u标记中返回的内容是数组,而不是所有content\u标记。

    您需要:

    def table_layout_for(object, *attrs)
      content_tag :table, :class => "layout" do
        ret = ''
        for a in attrs
          ret += content_tag :th do
            object.class.human_attribute_name(a)
          end
          ret += content_tag :td do
            object.send(a) if object.respond_to?(a)
          end
        end
        ret
      end
    end