2013-03-20 3 views
0

У меня есть следующий код, который повторяется несколько раз на моей странице html.erb.Повторяющийся код на странице html.erb

<% object_info.attributes.each do |attr_name, attr_value| %> 
      <span class="attribute_title"><%= attr_name %>:</span> 
      <span class="attribute_value"><%= attr_value %> </span> 
      <br/> 
    <% end %> 

Я хотел бы поместить его в метод, чтобы мне просто нужно было вызвать метод, когда он мне понадобится.

Я попытался положить его в хелперов страницу как метод и вызвать его на моей странице HTML:

def display_obj_attributes(active_record_obj) 

    data = "<% #{active_record_obj}.attributes.each do |attr_name, attr_value| %> 
      <span class='attribute_title'><%= attr_name %>:</span> 
      <span class='attribute_value'><%= attr_value %> </span> 
      <br/> 
      <% end %>" 


    return data.html_safe 


    end 

Но это не похоже на работу.

Любое предложение?

+5

использовать частичный, очиститель – apneadiving

+0

о да ... не могу поверить, я пропустил это – Kim

+0

да, частичное то, что вы хотите ... вы не хотите генерировать html в рубиновом методе, когда вы можете просто использовать частичный – tybro0103

ответ

0

Это одно решение.

def display_obj_attributes(active_record_obj) 
    data = '' 
    active_record_obj.attributes.each do |attr_name, attr_value| 
    data += content_tag(:span, "#{attr_name}:", :class => 'attribute_title') 
    data += content_tag(:span, attr_value, :class => 'attribute_value') 
    data += '<br/>' 
    end 
end 

<%= display_obj_attributes(toto) %> 

Лучше использовать частичные ... Частичное использование для описания HTML; вспомогательная функция, используемая для рендеринга HTML.

<%= render :partial => 'obj_attributes', :locals => { :active_record_obj => toto } %> 
2

Поместите его в парциальные, а _my_partial.js:

<% object_info.attributes.each do |attr_name, attr_value| %> 
    <span class="attribute_title"><%= attr_name %>:</span> 
    <span class="attribute_value"><%= attr_value %> </span> 
    <br/> 
<% end %> 

Затем на ваш взгляд:

<%= render 'my_partial', object_info: object_info %>