View helper с Rails возвращает неправильное значение [Rails, Ruby] - PullRequest
1 голос
/ 12 августа 2010

Я пытаюсь написать помощник вида, но он не возвращает правильную вещь.

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 Ответ

1 голос
/ 12 августа 2010

потому что содержимое, возвращаемое вашим блоком в теге content_tag, является вашим массивом, а не всем тегом content_tag.

Вам нужно сделать:

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