Ruby on Rails: получить коллекцию атрибутов для модели - PullRequest
3 голосов
/ 12 января 2011

У меня есть модель с множеством атрибутов, и я собрал серию страниц для сбора всех соответствующих данных.На последней странице я хочу показать пользователю все собранные данные.

Я мог бы создать эту страницу, вручную введя все метки и значения для каждого атрибута, но я ожидаю, что этот вид утомительной и повторяющейся задачи уже кем-то решен, так что в 3-4 строках кода.

На данном этапе я только создаю прототипы, поэтому это не должно выглядеть хорошо.

У кого-нибудь есть какие-либо предложения относительно того, как быстро напечатать на экране все атрибуты модели?

Я думал примерно так:

Если @ my_data_model - это переменная экземпляра, для которой я хочу напечатать атрибуты, то:

<%= show_attributes @my_data_model %>

будет выводить значения атрибутов с их метками.

Спасибо в ожидании.

Ответы [ 3 ]

5 голосов
/ 12 января 2011

Я делаю это для одного из моих проектов, таких как:

Сначала я определяю массив столбцов, которые мне не нужны, например столбцы меток времени:

<% @rejects = ["id", "created_at", "updated_at" %> 

Затем из объекта я удаляю эти столбцы;

<% @columns = Patient.column_names.reject { |c| @rejects.include?(c) } %>

Затем я перебираю имена столбцов и распечатываю введенную информацию:

<h2>Is the following information correct?</h2>
<div class="checks">
  <h3>Patient details</h3>
  <% @columns.each_with_index do |c, i| %>
    <p id="p<%= i %>" class="check">
      <span class="title"><%= c %>:</span>
      <span class="value"><%= @patient[i] %></span>
      <span class="valid">
        <img src="../../images/icons/tick.png" alt="green tick">
      </span>
    </p>
  <% end %>
</div>

Надеюсь, это поможет!

1 голос
/ 12 января 2011

Я использую это как общий вид представления для наследия_ресурсов gem .

%h2= resource_class.model_name.human

%table
  - resource_class.column_names.each do |column_name|
    %tr{ :class => (cycle "odd", "even") }
      %td= resource_class.human_attribute_name(column_name)
      - if resource[column_name].respond_to?(:strftime)
        %td= l resource.send(column_name)
      - else
        %td= resource.send(column_name)

Там resource_class возвращает текущий класс модели и resource текущий его экземпляр,

0 голосов
/ 13 января 2011

Спасибо всем,

Я строю решение на основе ваших рекомендаций, таких как:

<% @rejects = ["_id", "created_at", "updated_at"] %> 
<% @columns = Agency.column_names - @rejects %>
<% @columns.each_with_index do |c, i| %>
    <p id="p<%= i %>" class="check">
      <span class="title"><%= c %>:</span>
      <span class="value"><%= @agency.send(c) %></span>
    </p>
  <% end %>

Использование <%= @patient[i] %> не работает для меня, возможно, потому что я использую Mongomapper в качестве ORM.

...